Commit Graph

2026 Commits

Author SHA1 Message Date
Vinta Chen
057081ff91 docs: move Beanie to ORM > NoSQL Databases from Database Drivers
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>
2026-03-18 23:49:59 +08:00
Vinta Chen
d48c1b8904 docs: move streamlit to Data Visualization from Admin Panels
streamlit is primarily a data visualization and dashboard framework,
so it better fits the Data Visualization category.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-18 23:49:47 +08:00
Vinta Chen
02dab03848 chore(text-processing): restructure Markdown subsection and add TOML
- Replace Jimmy, Mistune, Python-Markdown with markdown-it-py, markdown,
  markitdown, and mistune (lowercased names, added CommonMark parser)
- Add new TOML subsection with stdlib tomllib entry

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-18 23:41:54 +08:00
Vinta Chen
5f44045f64 chore(files): move markitdown to Text Processing > Markdown
markitdown converts documents to Markdown, so it belongs under the
Markdown subcategory of Text Processing rather than the generic Files
section.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-18 23:41:45 +08:00
Vinta Chen
0cd4ccaec2 chore(dates-times): replace pytz with zoneinfo
Remove the third-party pytz in favour of the stdlib zoneinfo module
(Python 3.9+), which ships the IANA tz database directly.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-18 23:41:32 +08:00
Vinta Chen
7b8002426d feat(website): add co-maintainer credit and bump hero-sub font size
- Replace 'Curated by @vinta since 2014' with 'Maintained by @vinta
  and @JinyangWang27' to reflect the new co-maintainer
- Increase .hero-sub font size from --text-sm to --text-base for
  better readability

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-18 23:30:47 +08:00
Vinta Chen
56ccdfae8f Merge pull request #2973 from vinta/fix/replace-non-github-urls-with-github-repos
Replace non-GitHub URLs with GitHub repo URLs
2026-03-18 23:24:37 +08:00
Vinta Chen
f7a5ed8050 docs: move Automatic Rejection section to end; note GitHub URL preference
Positive criteria (Quality Requirements, Acceptance Criteria, Entry
Format) now appear before the rejection list, reducing friction for
contributors reading top-to-bottom. Adds a note that GitHub URLs are
preferred because awesome-python.com ranks entries by GitHub stars.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-18 23:15:39 +08:00
Vinta Chen
c1a4e69309 fix: replace non-GitHub URLs with GitHub repo URLs in README
Projects on awesome-python.com are ranked by GitHub stars; linking
directly to GitHub enables star fetching and improves discoverability.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-18 23:15:34 +08:00
Vinta Chen
fa00f10922 Merge pull request #2972 from vinta/feature/fetch-stats-workflow
ci: consolidate star fetch into deploy workflow with Actions cache
2026-03-18 22:57:43 +08:00
Vinta Chen
957d685ff4 ci: run fetch-stars step on every workflow trigger
Removed the 'if: github.event_name == schedule' guard so the step also
runs on manual dispatches and push-triggered deploys, not only on the
nightly schedule.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-18 22:55:29 +08:00
Vinta Chen
6148c13c0c feat: skip fetching repos whose cache entry is still fresh
Introduce CACHE_MAX_AGE_HOURS (12 h) and filter current_repos before
the fetch loop so repos that were updated recently are not re-requested.
Prints a breakdown of fetched vs cached count.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-18 22:55:21 +08:00
Vinta Chen
484515775f gitignore website/data 2026-03-18 22:48:20 +08:00
Vinta Chen
0d9dfb2713 ci: consolidate star fetch into deploy workflow using Actions cache
Replace the separate fetch-github-stars.yml workflow (which committed
star data back to git) with an inline fetch step in deploy-website.yml.
Star data is now stored in Actions cache between runs, eliminating the
workflow_run trigger chain and the need to track github_stars.json in
the repository.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-18 22:44:29 +08:00
Vinta Chen
3c3f371791 fix: use canonical GitHub Actions bot email with numeric ID
The generic email 'github-actions[bot]@users.noreply.github.com' does not
match GitHub's actual bot account. Using the numeric-prefixed form
'41898282+github-actions[bot]@users.noreply.github.com' ensures commits
made by the workflow are correctly attributed to the bot account.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-18 22:28:25 +08:00
Vinta Chen
bfed6a5c81 ci: trigger deploy after fetch-github-stars workflow succeeds
Adds a workflow_run trigger so the site is rebuilt whenever fresh
star data lands on master, in addition to the existing push trigger.
The build job guard ensures it only runs on direct pushes or when
the upstream workflow concluded successfully.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-18 22:18:10 +08:00
Vinta Chen
bbe145cb36 ci: add workflow to fetch and commit GitHub stars daily
Runs on a nightly schedule, installs deps with uv, calls make
fetch_github_stars, and pushes an update commit only when the
star data file actually changed.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-18 22:18:04 +08:00
Vinta Chen
d65c6ccd64 refactor: rename fetch_stats target and remove cache age gating
Rename the Makefile target from fetch_stats to fetch_github_stars to
match the script name. Remove CACHE_MAX_AGE_DAYS and the staleness
check so every run fetches all repos unconditionally.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-18 22:08:35 +08:00
Vinta Chen
b6d1bf9307 ci: use uv dependency groups and Makefile target for deploy workflow
Switches install step from --no-dev to --group build for explicit
dependency group selection, and replaces the bare python invocation
with `make build` to use the canonical build entrypoint.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-18 21:33:57 +08:00
Vinta Chen
ab18c7e54c refactor: reformat build.py to Black style and add llms.txt output
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>
2026-03-18 21:33:51 +08:00
Vinta Chen
539edc4e20 Merge pull request #2971 from vinta/feature/markdown-it-py-parser
feat: replace regex README parser with markdown-it-py AST parser
2026-03-18 20:35:06 +08:00
Vinta Chen
280f250ce0 feat: migrate README parser to markdown-it-py and refresh website
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>
2026-03-18 20:33:36 +08:00
Vinta Chen
95b6b3cc69 feat: improve table accessibility and mobile expand tags
- 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>
2026-03-18 18:49:52 +08:00
Vinta Chen
15a38caaf9 style: simplify footer layout and update links
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>
2026-03-18 18:43:08 +08:00
Vinta Chen
25ec0c3937 feat: extract inline favicon to static SVG file
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>
2026-03-18 18:34:15 +08:00
Vinta Chen
95718991f8 build: add project metadata and restructure dependency groups
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>
2026-03-18 18:34:11 +08:00
Vinta Chen
45391b84e9 build: simplify Makefile targets and add live-reload preview
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>
2026-03-18 18:28:27 +08:00
Vinta Chen
74bba50785 build: restructure dependency groups and add watchdog
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>
2026-03-18 18:28:19 +08:00
Vinta Chen
266a6b6b6c simplify: remove redundant _has_description, unused param, merge loops
- 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>
2026-03-18 17:41:13 +08:00
Vinta Chen
af3baab2ed refactor: consolidate load_cache into build.load_stars
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>
2026-03-18 17:28:53 +08:00
Vinta Chen
143abbf201 build: remove markdown dependency, replaced by markdown-it-py
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>
2026-03-18 17:28:50 +08:00
Vinta Chen
0f374970dd refactor: extract parsing logic from build.py into readme_parser module
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>
2026-03-18 17:27:14 +08:00
Vinta Chen
03ac212880 test: add integration tests against the real README.md
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>
2026-03-18 17:25:12 +08:00
Vinta Chen
a83809886c feat: implement HTML rendering for readme sections
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>
2026-03-18 17:24:24 +08:00
Vinta Chen
3d015bc630 feat(parser): implement entry extraction from bullet list AST nodes
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>
2026-03-18 17:23:11 +08:00
Vinta Chen
1c67c9f0e6 feat: replace regex README parser with markdown-it-py AST parser
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>
2026-03-18 17:21:49 +08:00
Vinta Chen
5fa7c7d1a6 feat(website): add markdown-it-py README parser and inline renderer tests
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>
2026-03-18 17:20:23 +08:00
Vinta Chen
c5caa5a5e1 ci: hardcode deployment URL to https://awesome-python.com
The deploy-pages action outputs http:// despite HTTPS being enforced.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 14:03:50 +08:00
Vinta Chen
a732751923 Merge pull request #2969 from vinta/feature/relaunch-website
Relaunch website with custom build system
2026-03-18 13:59:01 +08:00
Vinta Chen
7eb9b11a67 data: remove zipline entry from github_stars.json
Follows the removal of zipline from README.md (see bd73b1f).

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-18 13:57:36 +08:00
Vinta Chen
87a16f47ea build: load .env in Makefile and rename fetch_stars to site_fetch_stats
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>
2026-03-18 13:57:32 +08:00
Vinta Chen
2fe0f5c2bd ci: bump actions/checkout to v6 and upload-pages-artifact to v4
Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-18 13:57:26 +08:00
Vinta Chen
cd7b8f6bb0 update README description and remove Resources section
- 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>
2026-03-18 13:48:53 +08:00
Vinta Chen
177183d9bd add custom website build system
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>
2026-03-18 13:48:49 +08:00
Vinta Chen
4af84dac8e remove mkdocs site infrastructure
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>
2026-03-18 13:48:45 +08:00
Jinyang
1f7757f62b Merge pull request #2968 from JinyangWang27/remove-zipline
remove zipline
2026-03-18 08:35:03 +04:00
Jinyang
bd73b1faf0 remove zipline
No longer maintained and out-dated.
2026-03-18 07:57:37 +04:00
Vinta Chen
a8eac91658 add sponsorship 2026-03-17 19:23:40 +08:00
Jinyang
5ef25f1f38 Merge pull request #2950 from hiSandog/add-agno
Add Agno to Machine Learning section
2026-03-17 07:38:30 +04:00
Jinyang
742c99aa3c fix entry order 2026-03-17 07:37:53 +04:00