This file provides guidance to AI coding agents when working with code in this repository.
Pluggy is a minimalist production-ready plugin system that serves as the core framework for pytest, datasette and devpi. It provides hook specification and implementation mechanisms through a plugin manager system.
All commands use uv run for consistent environments.
uv run pytest- Run all tests (prefer running all tests for quick feedback)uv run pytest testing/benchmark.py- Run benchmark tests
uv run pre-commit run -a- Run all pre-commit hooks (linting, formatting, type checking)- Always reread files modified by pre-commit
- Always read
src/pluggy/*.pyto get a full picture - Consider backward compatibility
- Always run all tests:
uv run pytest - Always run pre-commit before committing:
uv run pre-commit run -a - Prefer running full pre-commit over individual tools (ruff/mypy)
- PluginManager (
src/pluggy/_manager.py): Central registry that manages plugins and coordinates hook calls - HookCaller (
src/pluggy/_hooks.py): Executes hook implementations with proper argument binding - HookImpl/HookSpec (
src/pluggy/_hooks.py): Represent hook implementations and specifications - Result (
src/pluggy/_result.py): Handles hook call results and exception propagation - Multicall (
src/pluggy/_callers.py): Core execution engine for calling multiple hook implementations
src/pluggy/- Main package sourcetesting/- Test suite using pytestdocs/- Sphinx documentation and exampleschangelog/- Towncrier fragments for changelog generation
pyproject.toml- Project metadata, build system, tool configuration (ruff, mypy, setuptools-scm)tox.ini- Multi-environment testing configuration.pre-commit-config.yaml- Code quality automation (ruff, mypy, flake8, etc.)