From 5c4607dd0f1619905b2e9f2f0deffa77ccc25fa0 Mon Sep 17 00:00:00 2001 From: Vinta Chen Date: Sun, 27 Sep 2026 14:46:47 +0800 Subject: [PATCH 01/17] refactor: reformat clickpy query string with ruff format ruff format --check flagged this file for the multi-line f-string concatenation. Co-Authored-By: Claude --- website/fetch_pypi_downloads_via_clickpy.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/website/fetch_pypi_downloads_via_clickpy.py b/website/fetch_pypi_downloads_via_clickpy.py index a708a6c6..0cbc89d3 100644 --- a/website/fetch_pypi_downloads_via_clickpy.py +++ b/website/fetch_pypi_downloads_via_clickpy.py @@ -84,12 +84,7 @@ def collect_names(readme_text: str) -> list[str]: def fetch_clickpy(names: list[str]) -> dict[str, int]: in_list = ", ".join(f"'{name}'" for name in names) - query = ( - "SELECT project, sum(count) AS downloads " - "FROM pypi.pypi_downloads_per_day " - f"WHERE project IN ({in_list}) AND date >= today() - 30 " - "GROUP BY project FORMAT JSON" - ) + query = f"SELECT project, sum(count) AS downloads FROM pypi.pypi_downloads_per_day WHERE project IN ({in_list}) AND date >= today() - 30 GROUP BY project FORMAT JSON" resp = httpx.post(CLICKPY_URL, content=query, timeout=60) resp.raise_for_status() return {row["project"]: int(row["downloads"]) for row in resp.json()["data"]} From f0ebe92155f17c0359fa29c238dfd3f528afa767 Mon Sep 17 00:00:00 2001 From: Vinta Chen Date: Sun, 27 Sep 2026 14:47:00 +0800 Subject: [PATCH 02/17] fix: order category page JSON-LD ItemList to match rendered rows Category pages' JSON-LD ItemList listed entries in download order while the table renders them in README (editorial) order, so structured-data positions didn't match the visible rows. Co-Authored-By: Claude --- website/build.py | 3 ++- website/tests/test_build.py | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/website/build.py b/website/build.py index 27b9adc0..0f299340 100644 --- a/website/build.py +++ b/website/build.py @@ -755,8 +755,9 @@ def build(repo_root: Path) -> None: if parent_category: breadcrumbs.append((parent_category["name"], category_public_url(parent_category))) breadcrumbs.append((category["name"], category_url)) + page_entries = [entry for group in entry_groups for entry in group["entries"]] if entry_groups else entries category_json_ld = json.dumps( - build_category_json_ld(category_title.removesuffix(" - Awesome Python"), category_url, category_description, entries, breadcrumbs), + build_category_json_ld(category_title.removesuffix(" - Awesome Python"), category_url, category_description, page_entries, breadcrumbs), ensure_ascii=False, ).replace("' + start = category_html.index(marker) + len(marker) + data = json.loads(category_html[start : category_html.index("", start)]) + collection = next(node for node in data["@graph"] if node["@type"] == "CollectionPage") + items = collection["mainEntity"]["itemListElement"] + assert [(item["position"], item["name"]) for item in items] == [(1, "zeta"), (2, "alpha")] + def test_group_page_falls_back_to_default_description_in_json_ld(self, tmp_path): readme = textwrap.dedent("""\ # T From 0abd19a99c6c4378fcf9a297668a16d699590a9d Mon Sep 17 00:00:00 2001 From: Vinta Chen Date: Sun, 27 Sep 2026 14:47:06 +0800 Subject: [PATCH 03/17] fix: number rows in sorted order after a column sort applyFilters walked the static load-order NodeList, so after sorting by a column header, row numbers kept each row's original load-order position instead of counting 1..n down the sorted table. Co-Authored-By: Claude --- website/static/main.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/website/static/main.js b/website/static/main.js index 93eac711..5314aca9 100644 --- a/website/static/main.js +++ b/website/static/main.js @@ -145,7 +145,9 @@ function applyFilters() { collapseAll(); - rows.forEach(function (row) { + // Number rows in their sorted DOM order, not the load order `rows` keeps + const orderedRows = tbody ? tbody.querySelectorAll("tr.row") : rows; + orderedRows.forEach(function (row) { let show = true; if (query) { From ec818ebcf8dcb9b18b9e6101ccef6bc5caa53cb3 Mon Sep 17 00:00:00 2001 From: Vinta Chen Date: Sun, 27 Sep 2026 14:47:10 +0800 Subject: [PATCH 04/17] fix: drop redundant aria-hidden on homepage description rows Homepage description rows carried aria-hidden="true" on top of hidden, unlike category pages (fixed in 528f9ed); the hidden attribute alone already keeps them from assistive tech while hidden. Co-Authored-By: Claude --- website/templates/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/templates/index.html b/website/templates/index.html index e4d95d10..4cb99d4c 100644 --- a/website/templates/index.html +++ b/website/templates/index.html @@ -241,7 +241,7 @@ → {% if entry.description %} - +
{{ entry.description | safe }}
From 1ed83b7f3d22c7d916f132cc322533aa9019b33d Mon Sep 17 00:00:00 2001 From: Vinta Chen Date: Sun, 27 Sep 2026 14:50:45 +0800 Subject: [PATCH 05/17] docs: fix 19 entry descriptions that drifted from upstream langchain used an old composability tagline; transformers named only NLP/vision/audio though it now covers text, vision, audio, video, and multimodal; pgmpy left out its causal reasoning scope; uvicorn listed uvloop/httptools though both are optional extras; django-oauth-toolkit's "goodies" undersold an OAuth 2.0 authorization server; django-unfold used marketing copy instead of a description; pyparsing didn't match its repo's PEG parser description; pdfminer.six didn't say what it does; pyyaml's "implementations" was vague; whenever didn't reflect its Rust-or-pure-Python support; itsdangerous used an outdated upstream tagline; winpython's "Windows 10/11" will go stale; mssql-python's "low memory usage" claim has no upstream source; diskcache repeated the project's own speed benchmark instead of describing it; hishel left out its server-side support; jupyter used IPython's tagline instead of its own; ray used an old tagline; wxPython's sentence was garbled; kivy referenced outdated "NUI" and "Mac OS X" terms. Co-Authored-By: Claude --- README.md | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 05f2d0c4..de89ab93 100644 --- a/README.md +++ b/README.md @@ -139,7 +139,7 @@ _Libraries for building AI applications, LLM integrations, and autonomous agents - [sentry-skills](https://github.com/getsentry/skills) - Python-focused engineering skills for code review, debugging, and backend workflows. - [trailofbits-skills](https://github.com/trailofbits/skills) - Python-friendly security skills for auditing, testing, and safer backend development. - Orchestration - - [langchain](https://github.com/langchain-ai/langchain) - Building applications with LLMs through composability. + - [langchain](https://github.com/langchain-ai/langchain) - A framework for building agents and LLM-powered applications. - [langgraph](https://github.com/langchain-ai/langgraph) - Low-level orchestration framework for building stateful, long-running LLM agents. - [crewai](https://github.com/crewAIInc/crewAI) - A framework for orchestrating role-playing autonomous AI agents for collaborative task solving. - [pydantic-ai](https://github.com/pydantic/pydantic-ai) - A Python agent framework for building generative AI applications with structured schemas. @@ -158,7 +158,7 @@ _Libraries for building AI applications, LLM integrations, and autonomous agents - [openviking](https://github.com/volcengine/OpenViking) - A context database for AI agents that unifies memory, resources, and skills. - [semantica](https://github.com/semantica-agi/semantica) - A graph-native context and knowledge layer for AI agents with reasoning, provenance, and governance. - Pre-trained Models - - [transformers](https://github.com/huggingface/transformers) - A framework that lets you easily use pre-trained transformer models for NLP, vision, and audio tasks. + - [transformers](https://github.com/huggingface/transformers) - The model-definition framework for pretrained models in text, computer vision, audio, video, and multimodal tasks, for inference and training. - LLM Inference and Serving - [sglang](https://github.com/sgl-project/sglang) - A high-performance serving framework for large language models and multimodal models. - [vllm](https://github.com/vllm-project/vllm) - A high-throughput and memory-efficient inference and serving engine for LLMs. @@ -198,7 +198,7 @@ _Libraries for Machine Learning. Also see [awesome-machine-learning](https://git - General - [scikit-learn](https://github.com/scikit-learn/scikit-learn) - The most popular Python library for Machine Learning with extensive documentation and community support. - - [pgmpy](https://github.com/pgmpy/pgmpy) - A Python library for probabilistic graphical models and Bayesian networks. + - [pgmpy](https://github.com/pgmpy/pgmpy) - A Python library for causal and probabilistic reasoning with graphical models. - [feature-engine](https://github.com/feature-engine/feature_engine) - sklearn compatible API with the widest toolset for feature engineering and selection. - Gradient Boosting - [xgboost](https://github.com/dmlc/xgboost) - A scalable, portable, and distributed gradient boosting library. @@ -287,7 +287,7 @@ _Libraries for building RESTful, GraphQL, and RPC APIs._ _ASGI and WSGI compatible web servers._ - ASGI - - [uvicorn](https://github.com/Kludex/uvicorn) - A lightning-fast ASGI server implementation, using uvloop and httptools. + - [uvicorn](https://github.com/Kludex/uvicorn) - A lightning-fast ASGI server implementation. - [granian](https://github.com/emmett-framework/granian) - A Rust HTTP server for Python applications built on top of Hyper and Tokio, supporting WSGI/ASGI/RSGI. - [hypercorn](https://github.com/pgjones/hypercorn) - An ASGI and WSGI Server based on Hyper libraries and inspired by Gunicorn. - WSGI @@ -325,7 +325,7 @@ _Libraries for implementing authentication schemes._ - [oauthlib](https://github.com/oauthlib/oauthlib) - A generic and thorough implementation of the OAuth request-signing logic. - [authlib](https://github.com/authlib/authlib) - A comprehensive library for building OAuth, OpenID Connect, and JWT/JWS/JWE/JWK/JWA. - [django-allauth](https://github.com/pennersr/django-allauth) - Authentication app for Django that "just works." - - [django-oauth-toolkit](https://github.com/django-oauth/django-oauth-toolkit) - OAuth 2 goodies for Django. + - [django-oauth-toolkit](https://github.com/django-oauth/django-oauth-toolkit) - An OAuth 2.0 authorization server for Django. - JWT - [pyjwt](https://github.com/jpadilla/pyjwt) - JSON Web Token implementation in Python. - Permissions @@ -337,7 +337,7 @@ _Libraries for implementing authentication schemes._ _Libraries for administrative interfaces._ - [flask-admin](https://github.com/pallets-eco/flask-admin) - Simple and extensible administrative interface framework for Flask. -- [django-unfold](https://github.com/unfoldadmin/django-unfold) - Elevate your Django admin with a stunning modern interface, powerful features, and seamless user experience. +- [django-unfold](https://github.com/unfoldadmin/django-unfold) - A modern Django admin theme for building dashboards, internal tools, and business applications. - [django-grappelli](https://github.com/sehmaschine/django-grappelli) - A jazzy skin for the Django Admin-Interface. ### CMS @@ -432,7 +432,7 @@ _Libraries for connecting and operating databases._ - Other Relational Databases - [pyodbc](https://github.com/mkleehammer/pyodbc) - An ODBC bridge for connecting to SQL Server and any other ODBC-accessible database. - [oracledb](https://github.com/oracle/python-oracledb) - The official Python driver for Oracle Database, successor to cx_Oracle. - - [mssql-python](https://github.com/microsoft/mssql-python) - Official Microsoft driver for SQL Server and Azure SQL, built on ODBC for high performance and low memory usage. + - [mssql-python](https://github.com/microsoft/mssql-python) - Official Microsoft driver for SQL Server and Azure SQL, built on ODBC for high performance. - NoSQL Databases - [redis](https://github.com/redis/redis-py) - The Python client for Redis. - [pymongo](https://github.com/mongodb/mongo-python-driver) - The official Python client for MongoDB. @@ -459,8 +459,8 @@ _In-process databases usable directly from Python._ _Libraries for caching data._ - [cachetools](https://github.com/tkem/cachetools) - Extensible memoizing collections and decorators. -- [diskcache](https://github.com/grantjenks/python-diskcache) - SQLite and file backed cache backend with faster lookups than memcached and redis. -- [hishel](https://github.com/karpetrosyan/hishel) - RFC 9111 compliant HTTP caching for httpx and requests, with sync and async support. +- [diskcache](https://github.com/grantjenks/python-diskcache) - SQLite and file backed cache backend, compatible with Django. +- [hishel](https://github.com/karpetrosyan/hishel) - RFC 9111 compliant HTTP caching for clients like httpx and requests and servers like FastAPI, with sync and async support. - [dogpile.cache](https://github.com/sqlalchemy/dogpile.cache) - dogpile.cache is a next generation replacement for Beaker made by the same authors. - [django-cacheops](https://github.com/Suor/django-cacheops) - A slick ORM cache with automatic granular event-driven invalidation. @@ -601,7 +601,7 @@ _Python implementation of data structures, algorithms and design patterns. Also _Interactive Python interpreters (REPL)._ - [ipython](https://github.com/ipython/ipython) - A powerful interactive Python shell, and the kernel behind Jupyter notebooks. -- [jupyter](https://github.com/jupyter/notebook) - A rich toolkit to help you make the most out of using Python interactively. +- [jupyter](https://github.com/jupyter/notebook) - A web-based notebook environment for interactive computing. - [awesome-jupyter](https://github.com/markusschanta/awesome-jupyter) - [marimo](https://github.com/marimo-team/marimo) - Transform data and train models, feels like a next-gen notebook, stored as Git-friendly Python. - [ptpython](https://github.com/prompt-toolkit/ptpython) - Advanced Python REPL built on top of the [python-prompt-toolkit](https://github.com/prompt-toolkit/python-prompt-toolkit). @@ -742,7 +742,7 @@ _Software and libraries for DevOps._ _Frameworks and libraries for Distributed Computing._ -- [ray](https://github.com/ray-project/ray/) - A system for parallel and distributed Python that unifies the machine learning ecosystem. +- [ray](https://github.com/ray-project/ray/) - A unified framework for scaling AI and Python applications. - [pyspark](https://github.com/apache/spark) - [Apache Spark](https://spark.apache.org/) Python API. - [dask](https://github.com/dask/dask) - A flexible parallel computing library for analytic computing. - [joblib](https://github.com/joblib/joblib) - A set of tools to provide lightweight pipelining in Python. @@ -843,8 +843,8 @@ _Libraries for working with graphical user interface applications._ - Desktop - [pygobject](https://github.com/GNOME/pygobject) - Python Bindings for GLib/GObject/GIO/GTK. - - [wxPython](https://github.com/wxWidgets/Phoenix) - A blending of the wxWidgets C++ class library with the Python. - - [kivy](https://github.com/kivy/kivy) - A library for creating NUI applications, running on Windows, Linux, Mac OS X, Android and iOS. + - [wxPython](https://github.com/wxWidgets/Phoenix) - A cross-platform GUI toolkit that wraps the wxWidgets C++ library. + - [kivy](https://github.com/kivy/kivy) - An open-source framework for cross-platform GUI apps on desktop, mobile, and embedded platforms. - [dearpygui](https://github.com/hoffstadt/DearPyGui) - A simple GPU-accelerated Python GUI framework. - [toga](https://github.com/beeware/toga) - A Python native, OS native GUI toolkit. - Qt @@ -880,7 +880,7 @@ _Libraries for parsing and manipulating plain texts._ - [babel](https://github.com/python-babel/babel) - An internationalization library for Python. - Parser - [pygments](https://github.com/pygments/pygments) - A generic syntax highlighter. - - [pyparsing](https://github.com/pyparsing/pyparsing) - A general purpose framework for generating parsers. + - [pyparsing](https://github.com/pyparsing/pyparsing) - A Python library for creating PEG parsers. - [sqlparse](https://github.com/andialbrecht/sqlparse) - A non-validating SQL parser. - [phonenumbers](https://github.com/daviddrysdale/python-phonenumbers) - Parsing, formatting, storing and validating international phone numbers. - [parsy](https://github.com/python-parsy/parsy) - Easy, generic parser combinator library for creating parsers. @@ -921,7 +921,7 @@ _Libraries for parsing and manipulating specific text formats._ - PDF - [pypdf](https://github.com/py-pdf/pypdf) - A library capable of splitting, merging, cropping, and transforming PDF pages. - [reportlab](https://www.reportlab.com/opensource/) - Allowing Rapid creation of rich PDF documents. - - [pdfminer.six](https://github.com/pdfminer/pdfminer.six) - Pdfminer.six is a community maintained fork of the original PDFMiner. + - [pdfminer.six](https://github.com/pdfminer/pdfminer.six) - A community-maintained fork of PDFMiner for extracting information from PDF documents. - HTML-to-PDF - [weasyprint](https://github.com/Kozea/WeasyPrint) - A visual rendering engine for HTML and CSS that can export to PDF. - Markdown @@ -930,7 +930,7 @@ _Libraries for parsing and manipulating specific text formats._ - [mistune](https://github.com/lepture/mistune) - A fast yet powerful Python Markdown parser with renderers and plugins. - Data Formats - [tomllib](https://docs.python.org/3/library/tomllib.html) - (Python standard library) Parse TOML files. - - [pyyaml](https://github.com/yaml/pyyaml) - YAML implementations for Python. + - [pyyaml](https://github.com/yaml/pyyaml) - A full-featured YAML framework for Python. ### File Manipulation @@ -1044,7 +1044,7 @@ _Libraries for working with dates and times._ - [python-dateutil](https://github.com/dateutil/dateutil) - Extensions to the standard Python [datetime](https://docs.python.org/3/library/datetime.html) module. - [dateparser](https://github.com/scrapinghub/dateparser) - A Python parser for human-readable dates in over 200 language locales. - [pendulum](https://github.com/python-pendulum/pendulum) - Python datetimes made easy. -- [whenever](https://github.com/ariebovenberg/whenever) - A modern datetime library, type-safe and DST-safe, backed by Rust. +- [whenever](https://github.com/ariebovenberg/whenever) - A modern datetime library, type-safe and DST-safe, in Rust or pure Python. **Python Toolchain** @@ -1111,7 +1111,7 @@ _Libraries for cryptographic primitives and secure protocols._ - [cryptography](https://github.com/pyca/cryptography) - A package designed to expose cryptographic primitives and recipes to Python developers. - [pynacl](https://github.com/pyca/pynacl) - Python binding to the Networking and Cryptography (NaCl) library. - [paramiko](https://github.com/paramiko/paramiko) - The leading native Python SSHv2 protocol library. -- [itsdangerous](https://github.com/pallets/itsdangerous) - Various helpers to pass trusted data to untrusted environments. +- [itsdangerous](https://github.com/pallets/itsdangerous) - Safely pass trusted data to untrusted environments and back. ### Penetration Testing @@ -1152,7 +1152,7 @@ _Python programming on Microsoft Windows._ - [pythonnet](https://github.com/pythonnet/pythonnet) - Python Integration with the .NET Common Language Runtime (CLR). - [pywin32](https://github.com/mhammond/pywin32) - Python Extensions for Windows. - [pyenv-win](https://github.com/pyenv-win/pyenv-win) - A Python version manager for Windows ([rbenv-win](https://github.com/nak1114/rbenv-win) fork). -- [winpython](https://github.com/winpython/winpython) - Portable development environment for Windows 10/11. +- [winpython](https://github.com/winpython/winpython) - Portable Python distribution for Windows. ### Miscellaneous From edc3db37faa7480a5c7a7e6d00ecad5997d5106c Mon Sep 17 00:00:00 2001 From: Vinta Chen Date: Sun, 27 Sep 2026 14:50:54 +0800 Subject: [PATCH 06/17] docs: fix 6 section descriptions that misdescribed their sections Computer Vision's description said nothing; Template Engines claimed lexing; Email claimed parsing and mail server management though yagmail only sends; Build Tools said "compile software" though Invoke and doit are task runners; File Format Processing said "text formats" though it covers ELF, xlsx, docx, and PDF; Package Repositories left out mirrors like bandersnatch. These descriptions show on the category pages. Co-Authored-By: Claude --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index de89ab93..42ae5ca0 100644 --- a/README.md +++ b/README.md @@ -223,7 +223,7 @@ _Libraries for working with human languages._ ### Computer Vision -_Libraries for Computer Vision._ +_Libraries for image and video analysis, object detection, and OCR._ - General - [opencv-python](https://github.com/opencv/opencv-python) - Open Source Computer Vision Library. @@ -305,7 +305,7 @@ _Libraries for working with WebSocket._ ### Template Engines -_Libraries and tools for templating and lexing._ +_Libraries for rendering text and HTML from templates._ - [jinja](https://github.com/pallets/jinja) - A modern and designer friendly templating language. - [mako](https://github.com/sqlalchemy/mako) - Hyperfast and lightweight templating for the Python platform. @@ -392,7 +392,7 @@ _Libraries to automate web scraping and extract web content._ ### Email -_Libraries for sending and parsing email, and mail server management._ +_Libraries for sending email._ - [yagmail](https://github.com/kootenpv/yagmail) - Yet another Gmail/SMTP client. @@ -692,7 +692,7 @@ _Libraries for debugging code._ ### Build Tools -_Compile software from source code. If you're looking for Python packaging/build tools, see [Package Management](#package-management)._ +_Task runners and software build tools. If you're looking for Python packaging/build tools, see [Package Management](#package-management)._ - [invoke](https://github.com/pyinvoke/invoke) - A tool for managing shell-oriented subprocesses and organizing executable Python code into CLI-invokable tasks. - [scons](https://github.com/SCons/scons) - A software construction tool. @@ -903,7 +903,7 @@ _Libraries for working with HTML and XML._ ### File Format Processing -_Libraries for parsing and manipulating specific text formats._ +_Libraries for parsing and manipulating specific file formats._ - General - [pyelftools](https://github.com/eliben/pyelftools) - Parsing and analyzing ELF files and DWARF debugging information. @@ -1074,7 +1074,7 @@ _Libraries for package and dependency management._ ### Package Repositories -_Local PyPI repository server and proxies._ +_Local PyPI repository servers, proxies, and mirrors._ - [bandersnatch](https://github.com/pypa/bandersnatch/) - PyPI mirroring tool provided by Python Packaging Authority (PyPA). - [devpi](https://github.com/devpi/devpi) - PyPI server and packaging/testing/release tool. From 2c0486a34a13d6c7129624e0f3c0d347845db92f Mon Sep 17 00:00:00 2001 From: Vinta Chen Date: Sun, 27 Sep 2026 14:52:10 +0800 Subject: [PATCH 07/17] docs: rewrite Data Validation category intro lead This lead followed the same appositive frame as the other category intro leads ("X, a/the Python Y library ..."), so it read as one template with the category swapped in; it now has its own sentence frame, keeping the same picks and facts. Co-Authored-By: Claude --- website/data/category_intros/data-validation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/data/category_intros/data-validation.md b/website/data/category_intros/data-validation.md index f5bd96ea..c2e7b863 100644 --- a/website/data/category_intros/data-validation.md +++ b/website/data/category_intros/data-validation.md @@ -1,4 +1,4 @@ -Validate API input and config with Pydantic, the Python data validation library built on type hints. Use Pandera for dataframes, jsonschema for JSON Schema. +Declare API input and config as type hints, and Pydantic validates them. Pandera brings Python data validation to dataframes, and jsonschema covers JSON Schema. How to choose: From 56aa4073d7b8caca77778348c62c58d3818afe33 Mon Sep 17 00:00:00 2001 From: Vinta Chen Date: Sun, 27 Sep 2026 14:52:14 +0800 Subject: [PATCH 08/17] docs: rewrite Date and Time category intro lead This lead followed the same appositive frame as the other category intro leads ("X, a/the Python Y library ..."), so it read as one template with the category swapped in; it now has its own sentence frame, keeping the same picks and facts. Co-Authored-By: Claude --- website/data/category_intros/date-and-time.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/data/category_intros/date-and-time.md b/website/data/category_intros/date-and-time.md index eeda6507..fcaf5a8c 100644 --- a/website/data/category_intros/date-and-time.md +++ b/website/data/category_intros/date-and-time.md @@ -1,4 +1,4 @@ -Most code should handle time zones with zoneinfo and pick python-dateutil, the Python date library for parsing date strings and adding months. +Handle time zones with the built-in zoneinfo. Parsing date strings and adding months is where a Python date library earns its install: python-dateutil. How to choose: From f293ce35498398c4d45e903fab706ae5c847befd Mon Sep 17 00:00:00 2001 From: Vinta Chen Date: Sun, 27 Sep 2026 14:52:18 +0800 Subject: [PATCH 09/17] docs: rewrite Game Development category intro lead This lead followed the same appositive frame as the other category intro leads ("X, a/the Python Y library ..."), so it read as one template with the category swapped in; it now has its own sentence frame, keeping the same picks and facts. Co-Authored-By: Claude --- website/data/category_intros/game-development.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/data/category_intros/game-development.md b/website/data/category_intros/game-development.md index 60c4a8c2..275c4f9b 100644 --- a/website/data/category_intros/game-development.md +++ b/website/data/category_intros/game-development.md @@ -1,4 +1,4 @@ -A 2D game needs a loop: write your own with pygame-ce, the Python game development library, or let Arcade run it. Panda3D does 3D, and Ren'Py visual novels. +pygame-ce leaves the 2D game loop to you, while Arcade runs it for you. For 3D, Panda3D covers Python game development, and Ren'Py builds visual novels. How to choose: From 86d857055bb7559cec7c93f4ce42ff810b82a0af Mon Sep 17 00:00:00 2001 From: Vinta Chen Date: Sun, 27 Sep 2026 14:52:26 +0800 Subject: [PATCH 10/17] docs: rewrite Web APIs category intro lead This lead followed the same appositive frame as the other category intro leads ("X, a/the Python Y library ..."), so it read as one template with the category swapped in; it now has its own sentence frame, keeping the same picks and facts. Co-Authored-By: Claude --- website/data/category_intros/web-apis.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/data/category_intros/web-apis.md b/website/data/category_intros/web-apis.md index 87bc81c7..aee66d97 100644 --- a/website/data/category_intros/web-apis.md +++ b/website/data/category_intros/web-apis.md @@ -1,4 +1,4 @@ -For a Django project, pick Django REST framework or Django Ninja. Outside Django, build on FastAPI, a Python API framework based on type hints. +Outside Django, declare each FastAPI endpoint with type hints. Django projects add a Python API framework on top instead: Django REST framework or Django Ninja. How to choose: From fc09dc706717029a911727c3b77a14b4660ae8f4 Mon Sep 17 00:00:00 2001 From: Vinta Chen Date: Sun, 27 Sep 2026 14:52:30 +0800 Subject: [PATCH 11/17] docs: rewrite Web Frameworks category intro lead This lead followed the same appositive frame as the other category intro leads ("X, a/the Python Y library ..."), so it read as one template with the category swapped in; it now has its own sentence frame, keeping the same picks and facts. Co-Authored-By: Claude --- website/data/category_intros/web-frameworks.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/data/category_intros/web-frameworks.md b/website/data/category_intros/web-frameworks.md index 653d607d..395deeea 100644 --- a/website/data/category_intros/web-frameworks.md +++ b/website/data/category_intros/web-frameworks.md @@ -1,4 +1,4 @@ -When you want an ORM, an admin, and auth built in, use Django. Flask, a smaller Python web framework, gives you a core you extend. +How much should a Python web framework build in? Django comes with an ORM, an admin, and auth; Flask gives you a small core to extend. How to choose: From 36880b3d8751dbddf6831aa7bee60fd6a4b75cc5 Mon Sep 17 00:00:00 2001 From: Vinta Chen Date: Sun, 27 Sep 2026 14:52:34 +0800 Subject: [PATCH 12/17] docs: rewrite Web Servers category intro lead This lead followed the same appositive frame as the other category intro leads ("X, a/the Python Y library ..."), so it read as one template with the category swapped in; it now has its own sentence frame, keeping the same picks and facts. Co-Authored-By: Claude --- website/data/category_intros/web-servers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/data/category_intros/web-servers.md b/website/data/category_intros/web-servers.md index 68fa6400..e20b7a25 100644 --- a/website/data/category_intros/web-servers.md +++ b/website/data/category_intros/web-servers.md @@ -1,4 +1,4 @@ -In production, Gunicorn serves WSGI apps like Django, and Uvicorn serves ASGI apps like FastAPI. Waitress, a pure-Python web server, runs WSGI apps on Windows. +In production, Gunicorn serves WSGI apps like Django, and Uvicorn ASGI apps like FastAPI. Need a Python web server on Windows? Waitress runs WSGI there. How to choose: From 540f462d4bcc9a7991a7795437488c6ae9e4e554 Mon Sep 17 00:00:00 2001 From: Vinta Chen Date: Sun, 27 Sep 2026 14:52:38 +0800 Subject: [PATCH 13/17] docs: rewrite WebSocket category intro lead This lead followed the same appositive frame as the other category intro leads ("X, a/the Python Y library ..."), so it read as one template with the category swapped in; it now has its own sentence frame, keeping the same picks and facts. Co-Authored-By: Claude --- website/data/category_intros/websocket.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/data/category_intros/websocket.md b/website/data/category_intros/websocket.md index 163e4eb7..ed95128c 100644 --- a/website/data/category_intros/websocket.md +++ b/website/data/category_intros/websocket.md @@ -1,4 +1,4 @@ -With Django, Channels is the pick; with Flask and Socket.IO clients, Flask-SocketIO. Standalone apps run on websockets, a Python WebSocket library. +Your Python WebSocket library follows your framework: Channels on Django, Flask-SocketIO on Flask with Socket.IO clients. websockets needs no framework. How to choose: From a04833275aab0af17c70d435d4d76d848abba458 Mon Sep 17 00:00:00 2001 From: Vinta Chen Date: Sun, 27 Sep 2026 14:52:42 +0800 Subject: [PATCH 14/17] docs: rewrite Template Engines category intro lead This lead followed the same appositive frame as the other category intro leads ("X, a/the Python Y library ..."), so it read as one template with the category swapped in; it now has its own sentence frame, keeping the same picks and facts. Co-Authored-By: Claude --- website/data/category_intros/template-engines.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/data/category_intros/template-engines.md b/website/data/category_intros/template-engines.md index b59f345d..c2d9eedc 100644 --- a/website/data/category_intros/template-engines.md +++ b/website/data/category_intros/template-engines.md @@ -1,4 +1,4 @@ -If your templates should hold no Python code, Jinja fits: a Python template engine whose sandbox also renders untrusted templates. Mako embeds plain Python. +Whether templates may hold Python code splits the Python template engines: Jinja keeps code out and sandboxes untrusted templates, Mako embeds plain Python. How to choose: From 9cdd11b62467e5ce1d60a85a5662f9a7834cdff9 Mon Sep 17 00:00:00 2001 From: Vinta Chen Date: Sun, 27 Sep 2026 14:52:46 +0800 Subject: [PATCH 15/17] docs: rewrite File Format Processing category intro lead This lead followed the same appositive frame as the other category intro leads ("X, a/the Python Y library ..."), so it read as one template with the category swapped in; it now has its own sentence frame, keeping the same picks and facts. Co-Authored-By: Claude --- website/data/category_intros/file-format-processing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/data/category_intros/file-format-processing.md b/website/data/category_intros/file-format-processing.md index 069f0bec..57e0328c 100644 --- a/website/data/category_intros/file-format-processing.md +++ b/website/data/category_intros/file-format-processing.md @@ -1,4 +1,4 @@ -PDF, Word, and Excel files open with pypdf, python-docx, and openpyxl, a Python file format library for each. MarkItDown turns all three into Markdown. +pypdf reads PDFs, python-docx Word files, and openpyxl Excel sheets: one Python file format library per format. MarkItDown turns any of them into Markdown. How to choose: From 6a038e3feff56872e0ba70b39417972469636556 Mon Sep 17 00:00:00 2001 From: Vinta Chen Date: Sun, 27 Sep 2026 15:06:32 +0800 Subject: [PATCH 16/17] docs: fix inaccurate entry descriptions across README 18 entry descriptions overstated, understated, or misattributed their projects, checked against upstream on 2026-09-27 and approved row by row. - django: "most popular" contradicted by the 2024 JetBrains/PSF survey, where FastAPI leads overall; now uses Django's own tagline. - joblib: described as pipelining; its docs say parallel computing and disk caching. - huey: called only "multi-threaded"; it also supports multi-process and greenlet workers. - numba: updated to its current NumPy-aware wording. - pytesseract: credited Google as Tesseract's developer, which ended in 2017. - pennylane: description was narrower than its quantum computing/QML/chemistry scope. - channels: didn't mention WebSocket support. - justhtml: left out that it sanitizes untrusted HTML by default. - akshare: left out its academic-research-only data terms. - timesfm: left out its non-commercial default weights. - pyvips: used libvips's own tagline instead of describing it as a binding. - ultralytics: dropped an unverifiable SOTA claim and added its tracking capability. - pandera: listed only 3 of its supported dataframe backends. - sentry-skills: claimed a Python focus and debugging scope; it's the Sentry team's own skill set. - trailofbits-skills: claimed to be Python-friendly, but only 2 of 85 skills are Python-specific. - mysqlclient: fork link pointed to SourceForge mysql-python instead of MySQLdb1, and it now notes MariaDB support. - charset-normalizer: called "the default" of requests, which prefers chardet when installed. - pynacl: described as binding NaCl directly; it binds libsodium, a NaCl fork. Co-Authored-By: Claude --- README.md | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 42ae5ca0..90393eed 100644 --- a/README.md +++ b/README.md @@ -136,8 +136,8 @@ _Libraries for building AI applications, LLM integrations, and autonomous agents - Agent Skills - [django-ai-plugins](https://github.com/vintasoftware/django-ai-plugins) - Django backend agent skills for Django, DRF, Celery, and Django-specific code review. - - [sentry-skills](https://github.com/getsentry/skills) - Python-focused engineering skills for code review, debugging, and backend workflows. - - [trailofbits-skills](https://github.com/trailofbits/skills) - Python-friendly security skills for auditing, testing, and safer backend development. + - [sentry-skills](https://github.com/getsentry/skills) - Agent skills the Sentry team uses for code review, pull requests, and Django reviews. + - [trailofbits-skills](https://github.com/trailofbits/skills) - Security skills for vulnerability detection, auditing, and testing. - Orchestration - [langchain](https://github.com/langchain-ai/langchain) - A framework for building agents and LLM-powered applications. - [langgraph](https://github.com/langchain-ai/langgraph) - Low-level orchestration framework for building stateful, long-running LLM agents. @@ -205,7 +205,7 @@ _Libraries for Machine Learning. Also see [awesome-machine-learning](https://git - [lightgbm](https://github.com/lightgbm-org/LightGBM) - A fast, distributed, high performance gradient boosting framework. - [catboost](https://github.com/catboost/catboost) - A fast, scalable, high performance gradient boosting on decision trees library. - Time Series Forecasting - - [timesfm](https://github.com/google-research/timesfm) - A pretrained foundation model from Google Research for time-series forecasting. + - [timesfm](https://github.com/google-research/timesfm) - A pretrained foundation model from Google Research for time-series forecasting, with non-commercial default weights. ### Natural Language Processing @@ -227,11 +227,11 @@ _Libraries for image and video analysis, object detection, and OCR._ - General - [opencv-python](https://github.com/opencv/opencv-python) - Open Source Computer Vision Library. - - [ultralytics](https://github.com/ultralytics/ultralytics) - Ultralytics YOLO for object detection, segmentation, pose estimation, and classification with state-of-the-art accuracy and speed. + - [ultralytics](https://github.com/ultralytics/ultralytics) - Ultralytics YOLO for object detection, segmentation, pose estimation, classification, and tracking. - [kornia](https://github.com/kornia/kornia/) - Open Source Differentiable Computer Vision Library for PyTorch. - [fiftyone](https://github.com/voxel51/fiftyone) - The open-source tool for building high-quality datasets and computer vision models. - OCR - - [pytesseract](https://github.com/madmaze/pytesseract) - A wrapper for [Google Tesseract OCR](https://github.com/tesseract-ocr). + - [pytesseract](https://github.com/madmaze/pytesseract) - A wrapper for the [Tesseract OCR](https://github.com/tesseract-ocr) engine. - [easyocr](https://github.com/JaidedAI/EasyOCR) - Ready-to-use OCR with 80+ languages supported. ### Recommender Systems @@ -251,7 +251,7 @@ _Traditional full stack web frameworks. Also see [Web APIs](#web-apis)._ - Synchronous - [flask](https://github.com/pallets/flask) - A microframework for Python. - [awesome-flask](https://github.com/humiaozuzu/awesome-flask) - - [django](https://github.com/django/django) - The most popular web framework in Python. + - [django](https://github.com/django/django) - A high-level web framework that encourages rapid development and clean, pragmatic design. - [awesome-django](https://github.com/wsvincent/awesome-django) - [bottle](https://github.com/bottlepy/bottle) - A fast and simple micro-framework distributed as a single file with no dependencies. - [pyramid](https://github.com/Pylons/pyramid) - A small, fast, down-to-earth, open source Python web framework. @@ -299,7 +299,7 @@ _ASGI and WSGI compatible web servers._ _Libraries for working with WebSocket._ - [websockets](https://github.com/python-websockets/websockets) - A library for building WebSocket servers and clients with a focus on correctness and simplicity. -- [channels](https://github.com/django/channels) - Developer-friendly asynchrony for Django. +- [channels](https://github.com/django/channels) - Brings WebSocket, long-poll HTTP, and other async support to Django. - [flask-socketio](https://github.com/miguelgrinberg/Flask-SocketIO) - Socket.IO integration for Flask applications. - [autobahn-python](https://github.com/crossbario/autobahn-python) - WebSocket & WAMP for Python on Twisted and [asyncio](https://docs.python.org/3/library/asyncio.html). @@ -419,7 +419,7 @@ _Libraries for connecting and operating databases._ - MySQL - [awesome-mysql](https://github.com/shlomi-noach/awesome-mysql) - [pymysql](https://github.com/PyMySQL/PyMySQL) - A pure-Python MySQL and MariaDB client library, based on PEP 249. - - [mysqlclient](https://github.com/PyMySQL/mysqlclient) - MySQL connector with Python 3 support ([mysql-python](https://sourceforge.net/projects/mysql-python/) fork). + - [mysqlclient](https://github.com/PyMySQL/mysqlclient) - MySQL and MariaDB connector ([MySQLdb1](https://github.com/farcepest/MySQLdb1) fork). - PostgreSQL - [awesome-postgres](https://github.com/dhamaniasad/awesome-postgres) - [psycopg](https://github.com/psycopg/psycopg) - The most popular PostgreSQL adapter for Python. - [asyncpg](https://github.com/MagicStack/asyncpg) - A fast PostgreSQL Database Client Library for Python/asyncio. @@ -502,7 +502,7 @@ _Libraries for data extraction, transformation, and loading pipelines across mul - [pathway](https://github.com/pathwaycom/pathway) - Python ETL framework for stream processing, real-time analytics, LLM pipelines, and RAG. - Financial Data - [yfinance](https://github.com/ranaroussi/yfinance) - Easy Pythonic way to download market and financial data from Yahoo Finance. - - [akshare](https://github.com/akfamily/akshare) - A financial data interface library, built for human beings! + - [akshare](https://github.com/akfamily/akshare) - A financial data interface library, with data provided for academic research only. - [edgartools](https://github.com/dgunning/edgartools) - Library for downloading structured data from SEC EDGAR filings and XBRL financial statements. - [openbb](https://github.com/OpenBB-finance/OpenBB) - A financial data platform for analysts, quants and AI agents. @@ -512,7 +512,7 @@ _Libraries for validating data. Used for forms in many cases._ - [pydantic](https://github.com/pydantic/pydantic) - Data validation using Python type hints. - [jsonschema](https://github.com/python-jsonschema/jsonschema) - An implementation of [JSON Schema](https://json-schema.org/) for Python. -- [pandera](https://github.com/unionai-oss/pandera) - A data validation library for dataframes, with support for pandas, polars, and Spark. +- [pandera](https://github.com/unionai-oss/pandera) - A data validation library for dataframes, with support for pandas, polars, PySpark, and more. ### Data Visualization @@ -548,7 +548,7 @@ _Libraries for scientific computing. Also see [Python-for-Scientists](https://gi - Core - [numpy](https://github.com/numpy/numpy) - A fundamental package for scientific computing with Python. - [scipy](https://github.com/scipy/scipy) - Fundamental algorithms for scientific computing in Python. - - [numba](https://github.com/numba/numba) - Python JIT compiler to LLVM aimed at scientific Python. + - [numba](https://github.com/numba/numba) - A NumPy-aware JIT compiler for Python, using LLVM. - Symbolic Mathematics - [sympy](https://github.com/sympy/sympy) - A Python library for symbolic mathematics. - Statistics @@ -578,7 +578,7 @@ _Libraries for quantum computing._ - [qiskit](https://github.com/Qiskit/qiskit) - An IBM-backed quantum SDK for building, simulating, and running circuits on real quantum hardware. - [qutip](https://github.com/qutip/qutip) - Quantum Toolbox in Python. -- [pennylane](https://github.com/PennyLaneAI/pennylane) - A hybrid quantum-classical machine learning library with automatic differentiation support. +- [pennylane](https://github.com/PennyLaneAI/pennylane) - A cross-platform library for quantum computing, quantum machine learning, and quantum chemistry. - [cirq](https://github.com/quantumlib/Cirq) - A Google-developed framework focused on hardware-aware quantum circuit design for NISQ devices. **Developer Tools** @@ -745,7 +745,7 @@ _Frameworks and libraries for Distributed Computing._ - [ray](https://github.com/ray-project/ray/) - A unified framework for scaling AI and Python applications. - [pyspark](https://github.com/apache/spark) - [Apache Spark](https://spark.apache.org/) Python API. - [dask](https://github.com/dask/dask) - A flexible parallel computing library for analytic computing. -- [joblib](https://github.com/joblib/joblib) - A set of tools to provide lightweight pipelining in Python. +- [joblib](https://github.com/joblib/joblib) - Parallel computing and disk-based caching for Python functions. - [mpi4py](https://github.com/mpi4py/mpi4py) - Python bindings for MPI. ### Task Queues @@ -755,7 +755,7 @@ _Libraries for working with task queues._ - [celery](https://github.com/celery/celery) - An asynchronous task queue/job queue based on distributed message passing. - [rq](https://github.com/rq/rq) - Simple job queues for Python. - [dramatiq](https://github.com/Bogdanp/dramatiq) - A fast and reliable background task processing library for Python 3. -- [huey](https://github.com/coleifer/huey) - Little multi-threaded task queue. +- [huey](https://github.com/coleifer/huey) - A little task queue with multi-process, multi-thread, or greenlet workers. - [taskiq](https://github.com/taskiq-python/taskiq) - Distributed task queue with native asyncio support and pluggable brokers. ### Messaging @@ -868,7 +868,7 @@ _Libraries for working with graphical user interface applications._ _Libraries for parsing and manipulating plain texts._ - Encoding and Unicode - - [charset-normalizer](https://github.com/jawah/charset_normalizer) - Universal character encoding detector, the default of the requests ecosystem. + - [charset-normalizer](https://github.com/jawah/charset_normalizer) - Universal character encoding detector, and a dependency of requests. - [chardet](https://github.com/chardet/chardet) - Python character encoding detector. - [ftfy](https://github.com/rspeer/python-ftfy) - Makes Unicode text less broken and more consistent automagically. - Fuzzy Matching @@ -899,7 +899,7 @@ _Libraries for working with HTML and XML._ - [lxml](https://github.com/lxml/lxml) - A very fast, easy-to-use and versatile library for handling HTML and XML. - [xmltodict](https://github.com/martinblech/xmltodict) - Working with XML feel like you are working with JSON. - [markupsafe](https://github.com/pallets/markupsafe) - Safely adds untrusted strings to HTML/XML markup. -- [justhtml](https://github.com/EmilStenstrom/justhtml/) - A pure Python HTML5 parser that just works. +- [justhtml](https://github.com/EmilStenstrom/justhtml/) - A pure Python HTML5 parser that sanitizes untrusted HTML by default. ### File Format Processing @@ -956,7 +956,7 @@ _Libraries for manipulating images._ - [scikit-image](https://github.com/scikit-image/scikit-image) - A Python library for (scientific) image processing. - [rembg](https://github.com/danielgatis/rembg) - A tool to remove image backgrounds. - [wand](https://github.com/emcconville/wand) - Python bindings for [MagickWand](https://imagemagick.org/magick-wand/), C API for ImageMagick. - - [pyvips](https://github.com/libvips/pyvips) - A fast image processing library with low memory needs. + - [pyvips](https://github.com/libvips/pyvips) - A binding for libvips, a fast image processing library with low memory needs. - Image Serving - [thumbor](https://github.com/thumbor/thumbor) - A smart imaging service. It enables on-demand crop, re-sizing and flipping of images. @@ -1109,7 +1109,7 @@ _Libraries for storing and parsing configuration options._ _Libraries for cryptographic primitives and secure protocols._ - [cryptography](https://github.com/pyca/cryptography) - A package designed to expose cryptographic primitives and recipes to Python developers. -- [pynacl](https://github.com/pyca/pynacl) - Python binding to the Networking and Cryptography (NaCl) library. +- [pynacl](https://github.com/pyca/pynacl) - Python binding to libsodium, a fork of the Networking and Cryptography (NaCl) library. - [paramiko](https://github.com/paramiko/paramiko) - The leading native Python SSHv2 protocol library. - [itsdangerous](https://github.com/pallets/itsdangerous) - Safely pass trusted data to untrusted environments and back. From a25bb7ac54a80155b5dea034e9160c6c8a79d6e6 Mon Sep 17 00:00:00 2001 From: Vinta Chen Date: Sun, 27 Sep 2026 15:10:37 +0800 Subject: [PATCH 17/17] docs: remove stale nested awesome lists for pyramid and fasthtml awesome-pyramid last pushed 2021-07-08 and awesome-fasthtml 2024-09-08, both stale (checked via GitHub API 2026-09-27). Co-Authored-By: Claude --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 90393eed..80951eeb 100644 --- a/README.md +++ b/README.md @@ -255,9 +255,7 @@ _Traditional full stack web frameworks. Also see [Web APIs](#web-apis)._ - [awesome-django](https://github.com/wsvincent/awesome-django) - [bottle](https://github.com/bottlepy/bottle) - A fast and simple micro-framework distributed as a single file with no dependencies. - [pyramid](https://github.com/Pylons/pyramid) - A small, fast, down-to-earth, open source Python web framework. - - [awesome-pyramid](https://github.com/uralbash/awesome-pyramid) - [fasthtml](https://github.com/AnswerDotAI/fasthtml) - The fastest way to create an HTML app. - - [awesome-fasthtml](https://github.com/amosgyamfi/awesome-fasthtml) - Asynchronous - [starlette](https://github.com/Kludex/starlette) - A lightweight ASGI framework and toolkit for building high-performance async services. - [tornado](https://github.com/tornadoweb/tornado) - A web framework and asynchronous networking library.