Python Conventions

pytest

  • Register helper fixtures using pytest_plugins = ["<module_path>"].
  • Name fixture functions with fixture_ prefix and pass public name via @pytest.fixture(name="foo").

CLI & Arguments

  • Use direct attribute access (e.g. args.foo) on argparse.Namespace with well-defined shapes. Avoid defensive getattr().

TypedDict

  • External Objects: When defining a TypedDict for an external object, link to its definition in the docstring.

Type Checking & Annotations

  • In-file disables vs target skipping: Prefer # pyrefly: ignore[<error-code>] (e.g. [missing-import]) over tags = ["no-pyrefly"].
  • No blanket ignores: NEVER use bare # type: ignore or literal # type: ignore[...]. Use error-specific ignores instead.
  • Type assertions: When adding assertions for type narrowing, add an end-of-line comment: assert foo is not None # type assert.
  • Consent for Any: Require user consent before changing type annotations to Any.

Delegating Functions

  • Module-level functions delegating to class methods should have a docstring referring to the class method (e.g. """Refer to \Class.method`."""`).