diff --git a/README.md b/README.md index 6c44226370..80951eeb76 100644 --- a/README.md +++ b/README.md @@ -136,10 +136,10 @@ _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) - 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. @@ -173,7 +173,7 @@ _Libraries for building AI applications, LLM integrations, and autonomous agents - [axolotl](https://github.com/axolotl-ai-cloud/axolotl) - A framework for fine-tuning and post-training large language models. - Speech - [openai-whisper](https://github.com/openai/whisper) - A general-purpose automatic speech recognition model trained on 680k hours of multilingual and multitask supervised data. - - [funasr](https://github.com/modelscope/FunASR) - Industrial-grade speech recognition toolkit with 170x realtime speed, 50+ languages, speaker diarization, and emotion detection. + - [funasr](https://github.com/modelscope/FunASR) - Industrial-grade speech recognition toolkit with speaker diarization and emotion detection. - [vibevoice](https://github.com/microsoft/VibeVoice) - A family of open-source voice AI models from Microsoft for text-to-speech and long-form speech recognition. - [gTTS](https://github.com/pndurette/gTTS) - Python library and CLI tool for converting text to speech using Google Translate TTS. - [kittentts](https://github.com/KittenML/KittenTTS) - Lightweight ONNX text-to-speech library with small CPU-friendly models. @@ -198,14 +198,14 @@ _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. - [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 @@ -223,16 +223,16 @@ _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. - - [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). - - [easyocr](https://github.com/JaidedAI/EasyOCR) - Ready-to-use OCR with 40+ languages supported. + - [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,13 +251,11 @@ _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. - - [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. @@ -274,7 +272,7 @@ _Libraries for building RESTful, GraphQL, and RPC APIs._ - [strawberry-django](https://github.com/strawberry-graphql/strawberry-django) - Strawberry GraphQL integration with Django. - [django-modern-rest](https://github.com/wemake-services/django-modern-rest) - Modern REST with speed, types, async, `msgspec`, `pydantic` and other goodies! - Flask - - [apiflask](https://github.com/apiflask/apiflask) - A lightweight Python web API framework based on Flask and Marshmallow. + - [apiflask](https://github.com/apiflask/apiflask) - A lightweight Python web API framework based on Flask, supporting marshmallow schemas and Pydantic models. - Framework Agnostic - [fastapi](https://github.com/fastapi/fastapi) - A modern, fast, web framework for building APIs with standard Python type hints. - [connexion](https://github.com/spec-first/connexion) - A spec-first framework that automatically handles requests based on your OpenAPI specification. @@ -287,7 +285,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 @@ -299,13 +297,13 @@ _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). ### 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. @@ -325,7 +323,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 +335,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 @@ -370,7 +368,7 @@ _Libraries for working with HTTP._ - [requests](https://github.com/psf/requests) - HTTP Requests for Humans. - [httpx](https://github.com/encode/httpx) - A next generation HTTP client for Python. - [aiohttp](https://github.com/aio-libs/aiohttp) - Asynchronous HTTP client/server framework for asyncio and Python. - - [urllib3](https://github.com/urllib3/urllib3) - A HTTP library with thread-safe connection pooling, file post support, sanity friendly. + - [urllib3](https://github.com/urllib3/urllib3) - An HTTP library with thread-safe connection pooling, file post, and more. - [httpx2](https://github.com/pydantic/httpx2) - HTTP/1.1 and HTTP/2 client with sync and async APIs, maintained by Pydantic ([httpx](https://github.com/encode/httpx) fork). - URL Manipulation - [yarl](https://github.com/aio-libs/yarl) - Yet another URL library. @@ -392,7 +390,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. @@ -405,7 +403,7 @@ _Libraries that implement Object-Relational Mapping or data mapping techniques._ - Relational Databases - [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) - The Python SQL Toolkit and Object Relational Mapper. - [awesome-sqlalchemy](https://github.com/dahlia/awesome-sqlalchemy) - - [django.db.models](https://github.com/django/django) - (part of Django) The Django [ORM](https://docs.djangoproject.com/en/dev/topics/db/models/). + - [django.db.models](https://github.com/django/django) - (part of Django) The Django [ORM](https://docs.djangoproject.com/en/stable/topics/db/models/). - [peewee](https://github.com/coleifer/peewee) - A small, expressive ORM. - [sqlmodel](https://github.com/fastapi/sqlmodel) - SQLModel is based on Python type annotations, and powered by Pydantic and SQLAlchemy. - NoSQL Databases @@ -418,8 +416,8 @@ _Libraries that implement Object-Relational Mapping or data mapping techniques._ _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 driver compatible to mysql-python. - - [mysqlclient](https://github.com/PyMySQL/mysqlclient) - MySQL connector with Python 3 support ([mysql-python](https://sourceforge.net/projects/mysql-python/) fork). + - [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 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. @@ -432,7 +430,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. @@ -449,7 +447,7 @@ _In-process databases usable directly from Python._ - Vector - [chromadb](https://github.com/chroma-core/chroma) - An open-source embedding database for building AI applications with embeddings and semantic search. - [lancedb](https://github.com/lancedb/lancedb) - A developer-friendly embedded retrieval database for multimodal AI. - - [zvec](https://github.com/alibaba/zvec) - An embedded vector database for on-device RAG and edge AI, the SQLite of vector databases. + - [zvec](https://github.com/alibaba/zvec) - A lightweight, in-process vector database that embeds directly into applications. - [pixeltable](https://github.com/pixeltable/pixeltable) - Declarative multimodal AI data engine for tables, computed columns, and embedding search. - Key-Value & Document - [tinydb](https://github.com/msiemens/tinydb) - A tiny, document-oriented database. @@ -459,8 +457,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. @@ -468,7 +466,7 @@ _Libraries for caching data._ _Libraries and software for indexing and performing search queries on data._ -- [elasticsearch](https://github.com/elastic/elasticsearch-py) - The official low-level Python client for [Elasticsearch](https://www.elastic.co/products/elasticsearch). +- [elasticsearch](https://github.com/elastic/elasticsearch-py) - The official low-level Python client for [Elasticsearch](https://www.elastic.co/elasticsearch). - [opensearch-py](https://github.com/opensearch-project/opensearch-py) - The official low-level Python client for [OpenSearch](https://opensearch.org/). - [meilisearch](https://github.com/meilisearch/meilisearch-python) - The official Python client for the [Meilisearch](https://www.meilisearch.com/) search engine. - [django-haystack](https://github.com/django-haystack/django-haystack) - Modular search for Django. @@ -502,7 +500,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,14 +510,14 @@ _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 _Libraries for visualizing data. Also see [awesome-javascript](https://github.com/sorrycc/awesome-javascript#data-visualization)._ - Plotting - - [matplotlib](https://github.com/matplotlib/matplotlib) - A Python 2D plotting library. + - [matplotlib](https://github.com/matplotlib/matplotlib) - A comprehensive library for creating static, animated, and interactive visualizations. - [plotly](https://github.com/plotly/plotly.py) - Interactive graphing library for Python. - [seaborn](https://github.com/mwaskom/seaborn) - Statistical data visualization using Matplotlib. - [altair](https://github.com/vega/altair) - Declarative statistical visualization library for Python. @@ -539,7 +537,7 @@ _Libraries for geocoding addresses and working with latitudes and longitudes._ - [geopandas](https://github.com/geopandas/geopandas) - Python tools for geographic data (GeoSeries/GeoDataFrame) built on pandas. - [geopy](https://github.com/geopy/geopy) - Python Geocoding Toolbox. - [geojson](https://github.com/jazzband/geojson) - Python bindings and utilities for GeoJSON. -- [geodjango](https://github.com/django/django) - (part of Django) A world-class [geographic web framework](https://docs.djangoproject.com/en/dev/ref/contrib/gis/). +- [geodjango](https://github.com/django/django) - (part of Django) A world-class [geographic web framework](https://docs.djangoproject.com/en/stable/ref/contrib/gis/). ### Science @@ -547,8 +545,8 @@ _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) - A Python-based ecosystem of open-source software for mathematics, science, and engineering. - - [numba](https://github.com/numba/numba) - Python JIT compiler to LLVM aimed at scientific Python. + - [scipy](https://github.com/scipy/scipy) - Fundamental algorithms for scientific computing in 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 +576,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** @@ -601,7 +599,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). @@ -629,7 +627,7 @@ _Tools of static analysis, linters and code quality checkers. Also see [awesome- - Refactoring - [rope](https://github.com/python-rope/rope) - Rope is a python refactoring library. - Type Checkers - [awesome-python-typing](https://github.com/typeddjango/awesome-python-typing) - - [mypy](https://github.com/python/mypy) - Check variable types during compile time. + - [mypy](https://github.com/python/mypy) - A static type checker for Python. - [ty](https://github.com/astral-sh/ty) - An extremely fast Python type checker and language server. - [pyright](https://github.com/microsoft/pyright) - Full-featured static type checker for Python from Microsoft, the engine behind Pylance. - [pyrefly](https://github.com/facebook/pyrefly) - A fast type checker and language server for Python. @@ -646,7 +644,7 @@ _Libraries for testing codebases and generating test data. Also see [awesome-pyt - [hypothesis](https://github.com/HypothesisWorks/hypothesis) - Hypothesis is an advanced Quickcheck style property based testing library. - [robotframework](https://github.com/robotframework/robotframework) - A generic test automation framework. - Test Runners - - [tox](https://github.com/tox-dev/tox) - Auto builds and tests distributions in multiple Python versions + - [tox](https://github.com/tox-dev/tox) - Auto builds and tests distributions in multiple Python versions. - [nox](https://github.com/wntrblm/nox) - Flexible test automation for Python. - Browser Automation - [playwright-python](https://github.com/microsoft/playwright-python) - Python version of the Playwright testing and automation library. @@ -655,7 +653,7 @@ _Libraries for testing codebases and generating test data. Also see [awesome-pyt - Load Testing - [locust](https://github.com/locustio/locust) - Scalable user load testing tool written in Python. - API Testing - - [schemathesis](https://github.com/schemathesis/schemathesis) - A tool for automatic property-based testing of web applications built with Open API / Swagger specifications. + - [schemathesis](https://github.com/schemathesis/schemathesis) - A tool for automatic property-based testing of web APIs from OpenAPI or GraphQL schemas. - Mock - [mock](https://docs.python.org/3/library/unittest.mock.html) - (Python standard library) A mocking and patching library. - [responses](https://github.com/getsentry/responses) - A utility library for mocking out the requests Python library. @@ -664,12 +662,12 @@ _Libraries for testing codebases and generating test data. Also see [awesome-pyt - [respx](https://github.com/lundberg/respx) - Mock HTTPX with awesome request patterns and response side effects. - Object Factories - [factory_boy](https://github.com/FactoryBoy/factory_boy) - A test fixtures replacement for Python. - - [polyfactory](https://github.com/litestar-org/polyfactory) - mock data generation library with support to classes (continuation of `pydantic-factories`) + - [polyfactory](https://github.com/litestar-org/polyfactory) - A mock data generation library based on type hints (continuation of `pydantic-factories`). - Code Coverage - [coverage](https://github.com/coveragepy/coveragepy) - Code coverage measurement. - Fake Data - [faker](https://github.com/joke2k/faker) - A Python package that generates fake data. - - [mimesis](https://github.com/lk-geimfari/mimesis) - is a Python library that help you generate fake data. + - [mimesis](https://github.com/lk-geimfari/mimesis) - A Python library for generating fake but realistic data in multiple languages and locales. ### Debugging Tools @@ -692,7 +690,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. @@ -706,7 +704,7 @@ _Libraries for generating project documentation._ - [awesome-sphinxdoc](https://github.com/ygzgxyz/awesome-sphinxdoc) - [mkdocs-material](https://github.com/squidfunk/mkdocs-material) - A documentation framework and Material Design theme built on MkDocs. - [diagrams](https://github.com/mingrammer/diagrams) - Diagram as Code. -- [pdoc](https://github.com/mitmproxy/pdoc) - Epydoc replacement to auto generate API documentation for Python libraries. +- [pdoc](https://github.com/mitmproxy/pdoc) - Auto-generates API documentation for Python projects. - [zensical](https://github.com/zensical/zensical) - A modern static site generator for technical documentation. **DevOps** @@ -723,7 +721,7 @@ _Software and libraries for DevOps._ - Configuration Management - [ansible](https://github.com/ansible/ansible) - A radically simple IT automation platform. - [cloud-init](https://github.com/canonical/cloud-init) - A multi-distribution package that handles early initialization of a cloud instance. - - [pyinfra](https://github.com/pyinfra-dev/pyinfra) - A versatile CLI tools and python libraries to automate infrastructure. + - [pyinfra](https://github.com/pyinfra-dev/pyinfra) - Turns Python code into shell commands and runs them on your servers. - [salt](https://github.com/saltstack/salt) - Infrastructure automation and management system. - Deployment - [fabric](https://github.com/fabric/fabric) - A simple, Pythonic tool for remote execution and deployment. @@ -742,10 +740,10 @@ _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. +- [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 +753,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 @@ -803,7 +801,7 @@ _Libraries for building command-line applications._ - CLI Development - [argparse](https://docs.python.org/3/library/argparse.html) - (Python standard library) Command-line option and argument parsing. - [click](https://github.com/pallets/click/) - A package for creating beautiful command line interfaces in a composable way. - - [typer](https://github.com/fastapi/typer) - Modern CLI framework that uses Python type hints. Built on Click and Pydantic. + - [typer](https://github.com/fastapi/typer) - Modern CLI framework that uses Python type hints. Built on Click. - [prompt_toolkit](https://github.com/prompt-toolkit/python-prompt-toolkit) - A library for building powerful interactive command lines. - [fire](https://github.com/google/python-fire) - A library for creating command line interfaces from absolutely any Python object. - Terminal Rendering @@ -831,7 +829,7 @@ _Useful CLI-based tools._ - [httpie](https://github.com/httpie/cli) - A command line HTTP client, a user-friendly cURL replacement. - Project Scaffolding - [cookiecutter](https://github.com/cookiecutter/cookiecutter) - A command-line utility that creates projects from cookiecutters (project templates). - - [copier](https://github.com/copier-org/copier) - A library and command-line utility for rendering projects templates. + - [copier](https://github.com/copier-org/copier) - A library and command-line utility for rendering project templates. - Shells - [xonsh](https://github.com/xonsh/xonsh/) - A Python-powered shell. Full-featured and cross-platform. - Terminal Workflow @@ -842,13 +840,13 @@ _Useful CLI-based tools._ _Libraries for working with graphical user interface applications._ - Desktop - - [pygobject](https://github.com/GNOME/pygobject) - Python Bindings for GLib/GObject/GIO/GTK+ (GTK+3). - - [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. - - [dearpygui](https://github.com/hoffstadt/DearPyGui) - A Simple GPU accelerated Python GUI framework + - [pygobject](https://github.com/GNOME/pygobject) - Python Bindings for GLib/GObject/GIO/GTK. + - [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 - - [PySide6](https://github.com/pyside/pyside-setup) - Qt for Python offers the official Python bindings for [Qt](https://www.qt.io/), same as PyQt6 but it's the official binding with different licensing. + - [PySide6](https://github.com/pyside/pyside-setup) - Qt for Python offers the official Python bindings for [Qt](https://www.qt.io/), largely API-compatible with PyQt6 but with different licensing. - [PyQt6](https://www.riverbankcomputing.com/static/Docs/PyQt6/) - Python bindings for the [Qt](https://www.qt.io/) cross-platform application and UI framework. - Tkinter - [tkinter](https://docs.python.org/3/library/tkinter.html) - (Python standard library) The standard Python interface to the Tcl/Tk GUI toolkit. @@ -868,7 +866,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 @@ -880,7 +878,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. @@ -898,12 +896,12 @@ _Libraries for working with HTML and XML._ - [beautifulsoup4](https://www.crummy.com/software/BeautifulSoup/bs4/doc/) - Providing Pythonic idioms for iterating, searching, and modifying HTML or 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) - Implements a XML/HTML/XHTML Markup safe string for Python. -- [justhtml](https://github.com/EmilStenstrom/justhtml/) - A pure Python HTML5 parser that just works. +- [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 sanitizes untrusted HTML by default. ### 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. @@ -915,22 +913,22 @@ _Libraries for parsing and manipulating specific text formats._ - [openpyxl](https://openpyxl.readthedocs.io/en/stable/) - A library for reading and writing Excel 2010 xlsx/xlsm/xltx/xltm files. - [xlsxwriter](https://github.com/jmcnamara/XlsxWriter) - A Python module for creating Excel .xlsx files. - Word - - [python-docx](https://github.com/python-openxml/python-docx) - Reads, queries and modifies Microsoft Word 2007/2008 docx files. + - [python-docx](https://github.com/python-openxml/python-docx) - Creates, reads, and updates Microsoft Word (.docx) files. - PowerPoint - [python-pptx](https://github.com/scanny/python-pptx) - Python library for creating and updating PowerPoint (.pptx) files. - 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 - [markdown-it-py](https://github.com/executablebooks/markdown-it-py) - Markdown parser with 100% CommonMark support, extensions, and syntax plugins. - [markdown](https://github.com/Python-Markdown/markdown) - A Python implementation of John Gruber’s Markdown. - - [mistune](https://github.com/lepture/mistune) - Fastest and full featured pure Python parsers of Markdown. + - [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 @@ -952,11 +950,11 @@ _Libraries for manipulating images._ - [qrcode](https://github.com/lincolnloop/python-qrcode) - A pure Python QR Code generator. - [python-barcode](https://github.com/WhyNotHugo/python-barcode) - Create barcodes in Python with no extra dependencies. - General - - [pillow](https://github.com/python-pillow/Pillow) - Pillow is the friendly [PIL](https://www.pythonware.com/products/pil/) fork. + - [pillow](https://github.com/python-pillow/Pillow) - Pillow is the friendly [PIL](https://pillow.readthedocs.io/en/stable/about.html) fork. - [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://www.imagemagick.org/script/magick-wand.php), C API for ImageMagick. - - [pyvips](https://github.com/libvips/pyvips) - A fast image processing library with low memory needs. + - [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 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. @@ -969,10 +967,10 @@ _Libraries for manipulating audio, video, and their metadata._ - [librosa](https://github.com/librosa/librosa) - Python library for audio and music analysis. - Video - [moviepy](https://github.com/Zulko/moviepy) - A module for script-based movie editing with many formats, including animated GIFs. - - [vidgear](https://github.com/abhiTronix/vidgear) - Most Powerful multi-threaded Video Processing framework. + - [vidgear](https://github.com/abhiTronix/vidgear) - A high-performance, cross-platform, multi-threaded video processing framework. - Metadata - [mutagen](https://github.com/quodlibet/mutagen) - A Python module to handle audio metadata. - - [tinytag](https://github.com/tinytag/tinytag) - A library for reading music meta data of MP3, OGG, FLAC and Wave files. + - [tinytag](https://github.com/tinytag/tinytag) - A library for reading audio file metadata of MP3, MP4, WAV, OGG, FLAC, WMA, and AIFF files. - [beets](https://github.com/beetbox/beets) - A music library manager and [MusicBrainz](https://musicbrainz.org/) tagger. ### Game Development @@ -980,7 +978,7 @@ _Libraries for manipulating audio, video, and their metadata._ _Awesome game development libraries._ - 3D Engines - - [panda3d](https://github.com/panda3d/panda3d) - 3D game engine developed by Disney. + - [panda3d](https://github.com/panda3d/panda3d) - 3D game engine developed jointly by Disney and contributors from around the world. - Game Frameworks - [pygame](https://github.com/pygame/pygame) - Pygame is a set of Python modules designed for writing games. - [pyglet](https://github.com/pyglet/pyglet) - A cross-platform windowing and multimedia library for Python. @@ -996,7 +994,7 @@ _Awesome game development libraries._ _Implementations of Python._ - [cpython](https://github.com/python/cpython) - Default, most widely used implementation of the Python programming language written in C. -- [micropython](https://github.com/micropython/micropython) - A lean and efficient Python programming language implementation. +- [micropython](https://github.com/micropython/micropython) - A lean and efficient Python implementation for microcontrollers and constrained systems. - [pypy](https://github.com/pypy/pypy) - A very fast and compliant implementation of the Python language. - [Cython](https://github.com/cython/cython) - Optimizing Static Compiler for Python. - [pyodide](https://github.com/pyodide/pyodide) - Python distribution for the browser and Node.js based on WebAssembly. @@ -1042,9 +1040,9 @@ _Libraries for working with dates and times._ - [zoneinfo](https://docs.python.org/3/library/zoneinfo.html) - (Python standard library) IANA time zone support. Brings the [tz database](https://en.wikipedia.org/wiki/Tz_database) into Python. - [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 dozens of languages. +- [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** @@ -1074,11 +1072,11 @@ _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. -- [warehouse](https://github.com/pypi/warehouse) - Next generation Python Package Repository (PyPI). +- [warehouse](https://github.com/pypi/warehouse) - The software that powers PyPI. ### Distribution @@ -1086,9 +1084,9 @@ _Libraries to create packaged executables for release distribution._ - Executables - [pyinstaller](https://github.com/pyinstaller/pyinstaller) - Converts Python programs into stand-alone executables (cross-platform). - - [Nuitka](https://github.com/Nuitka/Nuitka) - Compiles Python programs into high-performance standalone executables (cross-platform, supports all Python versions). + - [Nuitka](https://github.com/Nuitka/Nuitka) - Compiles Python programs into high-performance standalone executables (cross-platform). - [shiv](https://github.com/linkedin/shiv) - A command line utility for building fully self-contained zipapps (PEP 441), but with all their dependencies included. - - [cx-Freeze](https://github.com/marcelotduarte/cx_Freeze) - It is a Python tool that converts Python scripts into standalone executables and installers for Windows, macOS, and Linux. + - [cx-Freeze](https://github.com/marcelotduarte/cx_Freeze) - Converts Python scripts into standalone executables and installers for Windows, macOS, and Linux. - Obfuscation - [pyarmor](https://github.com/dashingsoft/pyarmor) - A tool used to obfuscate python scripts, bind obfuscated scripts to fixed machine or expire obfuscated scripts. @@ -1100,7 +1098,7 @@ _Libraries for storing and parsing configuration options._ - [python-dotenv](https://github.com/theskumar/python-dotenv) - Reads key-value pairs from a `.env` file and sets them as environment variables. - [pydantic-settings](https://github.com/pydantic/pydantic-settings) - Settings management using Pydantic models with validation, loading from environment variables and secrets files. - [hydra-core](https://github.com/facebookresearch/hydra) - Hydra is a framework for elegantly configuring complex applications. -- [dynaconf](https://github.com/dynaconf/dynaconf) - Dynaconf is a configuration manager with plugins for Django, Flask and FastAPI. +- [dynaconf](https://github.com/dynaconf/dynaconf) - Dynaconf is a configuration manager with plugins for Django and Flask. **Security** @@ -1109,9 +1107,9 @@ _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) - 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 @@ -1126,8 +1124,8 @@ _Frameworks and tools for penetration testing._ _Tools for auditing dependencies against known vulnerabilities._ -- [pip-audit](https://github.com/pypa/pip-audit) - Audits Python environments and dependency trees for known vulnerabilities, using the PyPI Advisory Database and OSV. -- [uv-audit](https://github.com/astral-sh/uv) - (part of uv) uv's [dependency vulnerability and malware scanning](https://docs.astral.sh/uv/reference/cli/#uv-audit) backed by OSV. +- [pip-audit](https://github.com/pypa/pip-audit) - Audits Python environments and dependency trees for known vulnerabilities, using the Python Packaging Advisory Database or OSV. +- [uv-audit](https://github.com/astral-sh/uv) - (part of uv) uv's [dependency vulnerability scanning](https://docs.astral.sh/uv/reference/cli/#uv-audit) backed by OSV. ### Web Security @@ -1151,8 +1149,8 @@ _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 ([pyenv](https://github.com/pyenv/pyenv) fork). -- [winpython](https://github.com/winpython/winpython) - Portable development environment for Windows 10/11. +- [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 Python distribution for Windows. ### Miscellaneous diff --git a/website/build.py b/website/build.py index 27b9adc064..0f2993408b 100644 --- a/website/build.py +++ b/website/build.py @@ -755,8 +755,9 @@ def render_category( 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(" 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"]} diff --git a/website/static/main.js b/website/static/main.js index 93eac7110f..5314aca986 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) { diff --git a/website/static/style.css b/website/static/style.css index 12ff6cdf34..4ada7574c4 100644 --- a/website/static/style.css +++ b/website/static/style.css @@ -535,7 +535,12 @@ kbd { .category-intro code, .guide-body code { + font-family: ui-monospace, "SFMono-Regular", "Menlo", monospace; font-size: 0.9em; + padding: 0.08rem 0.4rem; + border-radius: 0.4rem; + background: var(--hero-line); + color: var(--hero-text); } .jump-links { diff --git a/website/templates/index.html b/website/templates/index.html index e4d95d10f2..4cb99d4c5a 100644 --- a/website/templates/index.html +++ b/website/templates/index.html @@ -241,7 +241,7 @@

Results

→ {% if entry.description %} - +
{{ entry.description | safe }}
diff --git a/website/tests/test_build.py b/website/tests/test_build.py index 3588a7197f..42a44e0cef 100644 --- a/website/tests/test_build.py +++ b/website/tests/test_build.py @@ -679,6 +679,39 @@ def test_category_page_contains_json_ld(self, tmp_path): {"@type": "ListItem", "position": 2, "name": "Widgets", "item": "https://awesome-python.com/categories/widgets/"}, ] + def test_category_json_ld_follows_page_order(self, tmp_path): + readme = textwrap.dedent("""\ + # Awesome Python + + Intro. + + ## Projects + + **Tools** + + ## Widgets + + _Widget libraries._ + + - [zeta](https://example.com/zeta) - Listed first. + - [alpha](https://example.com/alpha) - Listed second. + + # Contributing + + Help! + """) + (tmp_path / "README.md").write_text(readme, encoding="utf-8") + self._copy_real_templates(tmp_path) + build(tmp_path) + + category_html = (tmp_path / "website" / "output" / "categories" / "widgets" / "index.html").read_text(encoding="utf-8") + marker = '", 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