Replaced the regex-based README parser with a proper AST parser using markdown-it-py, improving correctness and maintainability
Added website/readme_parser.py module with full entry extraction, HTML rendering, and 94 passing unit + integration tests
Extended the website with client-side features: column sorting (name, stars, last commit), URL-reflected search/filter state, relative time display, and improved table accessibility/mobile layout
Replaced pushed_at with last_commit_at (fetched from default branch) for more accurate recency data
Misc: extracted favicon to static SVG, live-reload preview, simplified Makefile, CSS transitions and polish
Test plan
make test — all 94 tests pass
make build — site builds without errors
make preview — verify table sorting, search/filter URL state, expanded rows, and mobile layout in browser
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
📋 Pull Request Information
Original PR: https://github.com/vinta/awesome-python/pull/2971
Author: @vinta
Created: 3/18/2026
Status: ✅ Merged
Merged: 3/18/2026
Merged by: @vinta
Base:
master← Head:feature/markdown-it-py-parser📝 Commits (10+)
5fa7c7dfeat(website): add markdown-it-py README parser and inline renderer tests1c67c9ffeat: replace regex README parser with markdown-it-py AST parser3d015bcfeat(parser): implement entry extraction from bullet list AST nodesa838098feat: implement HTML rendering for readme sections03ac212test: add integration tests against the real README.md0f37497refactor: extract parsing logic from build.py into readme_parser module143abbfbuild: remove markdown dependency, replaced by markdown-it-pyaf3baabrefactor: consolidate load_cache into build.load_stars266a6b6simplify: remove redundant _has_description, unused param, merge loops74bba50build: restructure dependency groups and add watchdog📊 Changes
15 files changed (+2527 additions, -1441 deletions)
View changed files
📝
Makefile(+16 -9)📝
pyproject.toml(+17 -9)📝
uv.lock(+61 -12)📝
website/build.py(+25 -277)📝
website/data/github_stars.json(+1274 -750)📝
website/fetch_github_stars.py(+8 -17)➕
website/readme_parser.py(+388 -0)➕
website/static/favicon.svg(+6 -0)📝
website/static/main.js(+142 -4)📝
website/static/style.css(+132 -23)📝
website/templates/base.html(+12 -15)📝
website/templates/index.html(+21 -14)📝
website/tests/test_build.py(+1 -289)📝
website/tests/test_fetch_github_stars.py(+0 -22)➕
website/tests/test_readme_parser.py(+424 -0)📄 Description
Summary
markdown-it-py, improving correctness and maintainabilitywebsite/readme_parser.pymodule with full entry extraction, HTML rendering, and 94 passing unit + integration testspushed_atwithlast_commit_at(fetched from default branch) for more accurate recency dataTest plan
make test— all 94 tests passmake build— site builds without errorsmake preview— verify table sorting, search/filter URL state, expanded rows, and mobile layout in browser🤖 Generated with Claude Code
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.