Skip to content

Dev Tools

Pre-Commit

This project uses pre-commit to ensure code quality. A .pre-commit-config.yaml configuration file tailored for this project is provided in the root folder.

# Setup pre-commit hooks for required formatting
pre-commit install
Config
default_language_version:
  python: python3.12
default_stages: [pre-commit]
repos:
  - repo: local
    hooks:
      - id: pytest-check
        name: pytest-check
        entry: uv run pytest
        language: system
        # stages: [push]
        types: [python]
        pass_filenames: false
        always_run: true
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v5.0.0
    hooks:
      # - id: trailing-whitespace
      # - id: check-ast
      - id: check-case-conflict
      - id: check-docstring-first
      - id: check-merge-conflict
      # - id: check-yaml
      - id: check-toml
      - id: check-json
      - id: detect-private-key
      - id: forbid-new-submodules
      # - id: check-added-large-files
  # https://pre-commit.com/hooks.html

  - repo: https://github.com/pre-commit/mirrors-mypy
    rev: v1.13.0
    hooks:
      - id: mypy
        # args: [--ignore-missing-imports]
        additional_dependencies: [mkdocs, orjson, pydantic]

  - repo: https://github.com/charliermarsh/ruff-pre-commit
    rev: v0.8.4
    hooks:
      - id: ruff
      - id: ruff-format

  - repo: https://github.com/commitizen-tools/commitizen
    rev: v4.1.0
    hooks:
      - id: commitizen
        stages: [commit-msg]
        additional_dependencies: [typing-extensions]
Installing Pre-Commit

To install pre-commit:

pip install pre-commit
More information

PyRight

PyRight is used for type checking. You can find the configuration in the pyproject.toml file.

hatch run pyright --help
Config
venvPath = "."
venv = ".venv"
pythonVersion = "3.12"
pythonPlatform = "All"
typeCheckingMode = "basic"
deprecateTypingAliases = true
reportMissingTypeStubs = false
reportUnusedCallResult = false
reportUnknownVariableType = false
reportAny = false
reportImplicitOverride = false
reportUnusedFunction = false
reportImplicitStringConcatenation = false
reportIgnoreCommentWithoutRule = false
reportUnannotatedClassAttribute = false
reportSelfClsParameterName = false
reportPrivateImportUsage = false
Installing PyRight

To install pyright:

pip install pyright
More information

MkDocs

Ruff is used as a linter. You can find the configuration in the pyproject.toml file.

hatch run ruff --help
Config
line-length = 90
extend-exclude = [
    "docs",
]
target-version = "py312"

[lint]
select = [
    "A",
    "B",
    "BLE",
    "C",
    "C4",
    "COM",
    "D",
    "E",
    "EM",
    "EXE",
    "F",
    "FA",
    "FLY",
    "G",
    "I",
    "ICN",
    "INP",
    "INT",
    "ISC",
    "N",
    "PERF",
    "PIE",
    "PLE",
    "PLC",
    "PLR",
    "PT",
    "PTH",
    "PYI",
    "Q",
    "RET",
    "RSE",
    "RUF",
    "SIM",
    "SLF",
    "SLOT",
    "T10",
    "TC",
    "TID",
    "TRY",
    "UP",
    "W",
    "YTT",
]
ignore = [
    "C408",
    "B905",
    "C901",
    "COM812",
    "D100",
    "D101",
    "D102",
    "D103",
    "D104",
    "D105",
    "D106",
    "D107",
    "D203",
    "D204",
    "D213",
    "D215",
    "D400",
    "D401",
    "D404",
    "D406",
    "D407",
    "D408",
    "D409",
    "D413",
    "ISC001",
    "PLR0912",
    "PLR0913",
    "PLR0915",
    "SLF001",
    "TRY003",
]

[lint.flake8-quotes]
docstring-quotes = "double"

[lint.isort]
lines-after-imports = 2
force-sort-within-sections = true
combine-as-imports = true

[lint.per-file-ignores]
"__init__.py" = [
    "E402",
    "I001",
]
"tests/test_decorators.py" = [
    "PLR2004",
]

[format]
preview = true
Installing MkDocs

To install mkdocs:

pip install mkdocs
More information

Coverage

Coverage is used to monitor test coverage.

hatch run coverage run some_module.py
Config
[report]
exclude_lines = [
    "pragma: no cover",
    "if TYPE_CHECKING:",
    "@overload",
    "except ImportError",
    "if __name__ == \"__main__\":",
]
Installing Coverage

To install coverage:

pip install coverage
More information

Ruff

Ruff is used as a linter. You can find the configuration in the pyproject.toml file.

hatch run ruff --help
Config
line-length = 90
extend-exclude = [
    "docs",
]
target-version = "py312"

[lint]
select = [
    "A",
    "B",
    "BLE",
    "C",
    "C4",
    "COM",
    "D",
    "E",
    "EM",
    "EXE",
    "F",
    "FA",
    "FLY",
    "G",
    "I",
    "ICN",
    "INP",
    "INT",
    "ISC",
    "N",
    "PERF",
    "PIE",
    "PLE",
    "PLC",
    "PLR",
    "PT",
    "PTH",
    "PYI",
    "Q",
    "RET",
    "RSE",
    "RUF",
    "SIM",
    "SLF",
    "SLOT",
    "T10",
    "TC",
    "TID",
    "TRY",
    "UP",
    "W",
    "YTT",
]
ignore = [
    "C408",
    "B905",
    "C901",
    "COM812",
    "D100",
    "D101",
    "D102",
    "D103",
    "D104",
    "D105",
    "D106",
    "D107",
    "D203",
    "D204",
    "D213",
    "D215",
    "D400",
    "D401",
    "D404",
    "D406",
    "D407",
    "D408",
    "D409",
    "D413",
    "ISC001",
    "PLR0912",
    "PLR0913",
    "PLR0915",
    "SLF001",
    "TRY003",
]

[lint.flake8-quotes]
docstring-quotes = "double"

[lint.isort]
lines-after-imports = 2
force-sort-within-sections = true
combine-as-imports = true

[lint.per-file-ignores]
"__init__.py" = [
    "E402",
    "I001",
]
"tests/test_decorators.py" = [
    "PLR2004",
]

[format]
preview = true
Installing Ruff

To install ruff:

pip install ruff
More information

MyPy

MyPy is used for type checking. You can find the configuration in the pyproject.toml file.

hatch run mypy --help
Config
python_version = "3.12"
disable_error_code = [
    "misc",
    "import",
]
pretty = true
check_untyped_defs = true
exclude = [
    "venv/",
    ".venv/",
    "tests/",
]
plugins = [
    "pydantic.mypy",
]
Installing MyPy

To install mypy:

pip install mypy
More information