Skip to content

[pull] master from vinta:master#60

Open
pull[bot] wants to merge 76 commits intotabulon-ext:masterfrom
vinta:master
Open

[pull] master from vinta:master#60
pull[bot] wants to merge 76 commits intotabulon-ext:masterfrom
vinta:master

Conversation

@pull
Copy link

@pull pull bot commented Mar 18, 2026

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

JinyangWang27 and others added 19 commits March 18, 2026 07:57
No longer maintained and out-dated.
Replace the MkDocs-based build (mkdocs.yml, requirements.txt, docs/CNAME,
docs/css/extra.css) with a custom website builder as part of the site relaunch.

Co-Authored-By: Claude <noreply@anthropic.com>
Replaces MkDocs with a bespoke Python site generator using Jinja2 templates
and Markdown. Adds uv for dependency management, GitHub Actions workflow for
deployment, and Makefile targets for local development (fetch_stars, build,
preview, deploy).

Co-Authored-By: Claude <noreply@anthropic.com>
- Add 'tools' to the description tagline
- Remove the Resources TOC entry (Newsletters, Podcasts) and corresponding
  section — content is no longer relevant to the relaunched site
- Remove uv from the Environment Management section (it's now a dev dependency
  managed by pyproject.toml, not a curated list entry)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Claude <noreply@anthropic.com>
Adds -include .env with export so environment variables (e.g. GitHub
token) are available to uv commands without manual export. Renames the
target to match the site_ prefix convention used by the other targets.

Co-Authored-By: Claude <noreply@anthropic.com>
Follows the removal of zipline from README.md (see bd73b1f).

Co-Authored-By: Claude <noreply@anthropic.com>
Relaunch website with custom build system
The deploy-pages action outputs http:// despite HTTPS being enforced.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ests

Introduce readme_parser.py which parses README.md into structured
section data using the markdown-it-py AST. Includes TypedDicts for
ParsedEntry/ParsedSection, slugify(), render_inline_html(), and
render_inline_text(). Add test_readme_parser.py covering HTML escaping,
link rendering, emphasis, strong, and code_inline for both renderers.

Co-Authored-By: Claude <noreply@anthropic.com>
Introduce parse_readme() which uses MarkdownIt to build a full AST
instead of line-by-line regex matching. The function splits the document
at the thematic break, groups nodes by h2 heading, extracts category
descriptions from leading italic paragraphs, and separates the
Categories, Resources, and Contributing sections cleanly.

Add markdown-it-py==4.0.0 (+ mdurl) as a runtime dependency to support
the new parser.

Tests cover section counts, names, slugs, descriptions, content
presence, boundary conditions (no separator, no description), and mixed
description markup.

Co-Authored-By: Claude <noreply@anthropic.com>
Replace _parse_section_entries stub with full implementation that walks
bullet_list AST nodes to extract ParsedEntry records, including support
for subcategory labels (text-only list items) and also_see nested links.

Add _parse_list_entries, helper finders (_find_inline, _find_first_link,
_find_child), and _extract_description_html with separator stripping.

Extend test suite with TestParseSectionEntries covering flat entries,
link-only entries, subcategorized entries, also_see, entry_count, preview
first-four, and XSS escaping in description HTML.

Co-Authored-By: Claude <noreply@anthropic.com>
Replace the _render_section_html stub with a working implementation that
converts parsed bullet-list nodes into classed div elements (entry,
entry-sub, subcat). Add _render_bullet_list_html to handle nested
structure and XSS escaping. Cover all cases with a new
TestRenderSectionHtml suite.

Co-Authored-By: Claude <noreply@anthropic.com>
Adds TestParseRealReadme covering category count, slug generation,
descriptions, entry counts, previews, content HTML, subcategory
rendering, also-see links, and description link stripping.

Co-Authored-By: Claude <noreply@anthropic.com>
slugify, parse_readme, count_entries, extract_preview, render_content_html,
and related helpers are moved to a dedicated readme_parser module.
build.py now imports from readme_parser rather than defining these inline.
Tests for the removed functions are dropped from test_build.py since they
now live with the module they test.

Co-Authored-By: Claude <noreply@anthropic.com>
The markdown package is no longer used after switching the README parser
to markdown-it-py in the feature branch.

Co-Authored-By: Claude <noreply@anthropic.com>
load_cache was a duplicate of logic now living in build.load_stars.
Switch the call site to the shared helper and remove the redundant
local function and its tests.

Co-Authored-By: Claude <noreply@anthropic.com>
- Remove `_has_description` which duplicated `_extract_description` logic;
  use truthiness of the description string instead
- Remove unused `resources` parameter from `extract_entries`
- Merge two sequential loops in `parse_readme` into a single pass over
  children to find hr, Resources, and Contributing indices

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@pull pull bot locked and limited conversation to collaborators Mar 18, 2026
@pull pull bot added the ⤵️ pull label Mar 18, 2026
vinta and others added 9 commits March 18, 2026 18:28
Split flat dev group into named groups (build, lint, test) so CI
and production installs can pull only what they need. Add watchdog
for the live-reload preview target.

Co-Authored-By: Claude <noreply@anthropic.com>
Rename site_* targets to bare names (install, fetch_stats, build,
preview). Replace the static preview target with a watchmedo-driven
live-reload loop so file changes trigger automatic rebuilds. Make
the output directory creation idempotent (exist_ok=True) and static
copy incremental (dirs_exist_ok=True) so repeated builds don't wipe
output on each run.

Co-Authored-By: Claude <noreply@anthropic.com>
Add authors, readme, license, and project URLs to pyproject.toml.
Move build deps out of the default dependencies list into named groups
(build, lint, test, dev) so each tool group can be installed independently.
uv.lock updated to reflect the new group structure.

Co-Authored-By: Claude <noreply@anthropic.com>
Replace the inline data-URI emoji favicon with a proper Python-logo SVG
served from /static/favicon.svg. Avoids repeated base64 encoding overhead
and allows the icon to be cached and updated independently.

Co-Authored-By: Claude <noreply@anthropic.com>
Replace two-column footer (links left, attribution right) with a
single inline row of slash-separated items. Update attribution text
to 'Made by Vinta' with a link to vinta.ws, align footer links to
match standard anchor color/hover behavior.

Co-Authored-By: Claude <noreply@anthropic.com>
- Add sr-only headings for search/filter and results regions
- Add role=region and aria-label to .table-wrap for landmark navigation
- Add tabindex=0 and focus outline to .table-wrap for keyboard reachability
- Add sr-only text to empty Details column header
- Add role=button to expandable rows
- Add .expand-tags-mobile to show category/group tags in expand row on mobile
- Show .expand-tags-mobile via media query at <=900px breakpoint

Co-Authored-By: Claude <noreply@anthropic.com>
Switch readme_parser.py from regex-based parsing to markdown-it-py for
more robust and maintainable Markdown AST traversal. Update build pipeline,
templates, styles, and JS to support the new parser output. Refresh GitHub
stars data and update tests to match new parser behavior.

Co-Authored-By: Claude <noreply@anthropic.com>
feat: replace regex README parser with markdown-it-py AST parser
Reformats dict and list literals to trailing-comma multiline style
throughout. Also copies README.md to llms.txt in the site output so
LLM crawlers can discover the full content.

Co-Authored-By: Claude <noreply@anthropic.com>
vinta and others added 30 commits March 18, 2026 23:49
Beanie is an ODM (Object-Document Mapper), not a raw database driver,
so it fits better under ORM > NoSQL Databases alongside mongoengine and ODMantic.

Co-Authored-By: Claude <noreply@anthropic.com>
The financial data tools (akshare, edgartools, OpenBB, yfinance) are a
distinct cluster from general-purpose downloaders (s3cmd, youtube-dl),
so grouping them into subcategories improves discoverability.

Co-Authored-By: Claude <noreply@anthropic.com>
docling (document-to-structured-data conversion) and textract (text
extraction from Office/PDF files) are document parsing tools, not
data analysis or web scraping tools, so Text Processing > General
is a more accurate placement.

Co-Authored-By: Claude <noreply@anthropic.com>
Cleanup: replace deprecated entries, fix categories, add new entries
Update 79 entries where the display name differed from the GitHub
repository name only in casing (e.g. NumPy→numpy, LangChain→langchain,
SQLAlchemy→sqlalchemy, DuckDB→duckdb).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Django MongoDB Backend→django-mongodb-backend, Karate Club→karateclub,
Open Babel→openbabel, Robot Framework→robotframework,
Feature-engine→feature_engine, memory-graph→memory_graph, Jinja2→jinja,
Cocos2d→cocos, LlamaIndex→llama_index, VCR.py→vcrpy,
Spiff→SpiffWorkflow.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
H2O→h2o, PyMC→pymc (drop version suffixes from repo names).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ortlab

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Claude <noreply@anthropic.com>
Prefer PyPI package name as display name so developers can copy it
directly to pip install. Fall back to GitHub repo name if not on PyPI.
Also update examples to use lowercase PyPI names.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Standardize display names to lowercase across all categories (audioFlux,
EasyOCR, UltraPlot, PySpark, cx_Freeze, OpenBB, DearPyGui, WeasyPrint,
Pillow, Quads, TaskFlow, Metrics, spaCy, funNLP, PynamoDB, Surprise,
Bowler, zeroRPC, SimPy, XlsxWriter, HTTPretty) for consistent formatting.

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Lowercase name, link to official docs, add stdlib label.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
eyeD3→eyed3, Gooey→gooey, gTTS→gtts, MechanicalSoup→mechanicalsoup,
MonkeyType→monkeytype, PraisonAI→praisonai, PyMySQL→pymysql,
Zappa→zappa.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
New category for LLM integrations, agent frameworks, and AI applications.
Move agno, instructor, langchain, llama_index, praisonai, pydantic-ai,
ragflow from Machine Learning. Add autoresearch (karpathy).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Remove the Specialized catchall group. Redistribute its categories:
- Web & API: Admin Panels, CMS, Email, Static Site Generator, URL Manipulation
- AI & Data: Geolocation, Robotics
- Content & Media: Game Development, Internationalization
- System & Runtime: Date and Time, Hardware, Microsoft Windows
- Development Tools: Algorithms and Design Patterns

Only Miscellaneous remains ungrouped (falls into Other).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
AI & ML: AI and Agents, Machine Learning, Deep Learning, Computer Vision,
Natural Language Processing, Recommender Systems, Robotics.

Data & Science: Data Analysis, Data Validation, Data Visualization,
Geolocation, Science, Quantum Computing.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…sibility

Co-Authored-By: Claude <noreply@anthropic.com>
…e layout

Co-Authored-By: Claude <noreply@anthropic.com>
Switch table-layout back to auto on mobile to let columns size naturally,
add uniform cell padding overrides, shrink num/arrow columns further,
pin stars column width, reduce edge padding, and left-align the number
column to avoid awkward right-aligned single digits.

Co-Authored-By: Claude <noreply@anthropic.com>
Rename 'Python' to 'Python for VSCode' in the Editor Plugins section
to disambiguate the extension from the Python language itself.

Co-Authored-By: Claude <noreply@anthropic.com>
- Relocate group tag from expand row to category column so it appears inline beside the category tag
- Add margin between stacked tags with .col-cat .tag + .tag spacing rule
- Remove fixed width from .col-cat; narrow .col-name from 35% to 30% to give category column room
- Hide .tag-group on screens ≤900px and widen .col-name to 50% to reclaim space

Co-Authored-By: Claude <noreply@anthropic.com>
…wrapping

Add active-state press feedback (scale transform) to buttons, filter clear,
and tags. Add moz-osx-font-smoothing for consistent antialiasing on Firefox/Mac.
Apply text-wrap: balance to headings and text-wrap: pretty to body text and
expanded row descriptions. Add text-underline-offset to links and highlight
active table rows with bg-hover.

Co-Authored-By: Claude <noreply@anthropic.com>
- Move pyenv-win as sub-entry under pyenv
- Add uv to Environment Management
- Remove pip-tools sub-entry from pip
- Add pipx and mamba entries
- Remove hatch entry
- Update uv description in Package Management

Co-Authored-By: Claude <noreply@anthropic.com>
Entries appearing in more than one category were previously emitted as
separate rows. They are now deduplicated in build.py by URL, collecting
all category and group names into lists.

The template encodes those lists as pipe-delimited data attributes
(data-cats, data-groups) and renders a tag button per category.
The JS filter is updated to split on '||' and check for membership,
so clicking any category tag correctly shows the merged row.

Co-Authored-By: Claude <noreply@anthropic.com>
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants