Skip to main content

jaymd96-pants-baseline

An opinionated Python code quality baseline plugin for the Pants build system.

Overview

This plugin integrates modern, high-performance tools from the Astral ecosystem to enforce consistent code quality standards across Python projects:

Tool Purpose Performance
Ruff Linting & Formatting 100-1000x faster than Flake8/Black
ty Type Checking 10-60x faster than MyPy
uv Dependency Security Audit 10-100x faster than pip
pytest Testing with Coverage Industry standard

Installation

Add the plugin to your pants.toml:

[GLOBAL]
backend_packages = [
    "pants.backend.python",
    "pants_baseline",
]

plugins = [
    "jaymd96-pants-baseline==0.2.0",
]

Quick Start

1. Define a baseline project

Create a BUILD file in your project root:

baseline_python_project(
    name="my_project",
    sources=["src/**/*.py"],
    test_sources=["tests/**/*.py"],
    python_version="3.13",
    line_length=120,
    strict=True,
    coverage_threshold=80,
)

2. Run quality checks

# Lint with Ruff
pants baseline-lint ::

# Format with Ruff
pants baseline-fmt ::

# Type check with ty
pants baseline-typecheck ::

# Run tests with coverage
pants baseline-test ::

# Security audit with uv
pants baseline-audit ::

Configuration

Global Configuration (pants.toml)

[python-baseline]
# Enable/disable all baseline checks
enabled = true

# Target Python version
python_version = "3.13"

# Maximum line length
line_length = 120

# Source and test directories
src_roots = ["src"]
test_roots = ["tests"]

# Minimum coverage threshold
coverage_threshold = 80

# Enable strict mode for all tools
strict_mode = true

# Patterns to exclude
exclude_patterns = [
    ".venv",
    "__pycache__",
    "migrations",
]

Ruff Configuration

[ruff]
version = "0.2.0"

# Lint rules to enable
select = [
    "E",      # pycodestyle errors
    "W",      # pycodestyle warnings
    "F",      # pyflakes
    "I",      # isort
    "N",      # pep8-naming
    "UP",     # pyupgrade
    "B",      # flake8-bugbear
    "C4",     # flake8-comprehensions
    "SIM",    # flake8-simplify
    "RUF",    # Ruff-specific
]

# Rules to ignore
ignore = ["E501"]

# Formatting options
quote_style = "double"
indent_style = "space"

# Auto-fix options
fix = true
unsafe_fixes = false

ty Configuration

[ty]
version = "0.1.0"

# Enable strict type checking
strict = true

# Reporting options
report_missing_imports = true
report_unused_imports = true
report_unused_variables = true

# Include/exclude paths
include = ["src", "tests"]
exclude = [".venv", "dist"]

# Output format (text, json, github)
output_format = "text"

uv Configuration

[uv]
version = "0.5.0"

# Security auditing
audit_enabled = true
audit_ignore_vulns = []
audit_fail_on_warning = false

# Lock file
lock_file = "uv.lock"
require_lock = true

# Output format
output_format = "text"

Target Fields

The baseline_python_project target supports the following fields:

Field Type Default Description
sources list[str] ["**/*.py"] Python source file patterns
test_sources list[str] ["tests/**/*.py"] Test file patterns
python_version str "3.13" Target Python version
line_length int 120 Maximum line length
strict bool True Enable strict mode
coverage_threshold int 80 Minimum coverage %
skip_lint bool False Skip Ruff linting
skip_fmt bool False Skip Ruff formatting
skip_typecheck bool False Skip ty type checking
skip_test bool False Skip pytest
skip_audit bool False Skip uv security audit

Goals

baseline-lint

Run Ruff linting on Python files.

pants baseline-lint src/::

baseline-fmt

Format Python files with Ruff.

pants baseline-fmt src/::

# Check formatting without modifying files
pants baseline-fmt --check src/::

baseline-typecheck

Run ty type checking.

pants baseline-typecheck src/::

baseline-test

Run pytest with coverage.

pants baseline-test tests/::

# Run specific test markers
pants baseline-test --pytest-args="-m unit" tests/::

baseline-audit

Run uv security audit on dependencies.

pants baseline-audit ::

# Ignore specific vulnerabilities
pants --uv-audit-ignore-vulns="['GHSA-xxxx']" baseline-audit ::

Example Project Structure

my-project/
├── BUILD
├── pants.toml
├── pyproject.toml
├── uv.lock
├── src/
│   └── my_package/
│       ├── BUILD
│       ├── __init__.py
│       └── main.py
└── tests/
    ├── BUILD
    ├── conftest.py
    └── test_main.py

Root BUILD file

baseline_python_project(
    name="my_project",
    sources=["src/**/*.py"],
    test_sources=["tests/**/*.py"],
)

pants.toml

[GLOBAL]
pants_version = "2.30.1"
backend_packages = [
    "pants.backend.python",
    "pants_baseline",
]
plugins = ["jaymd96-pants-baseline==0.2.0"]

[python]
interpreter_constraints = ["CPython>=3.13,<4"]

[python-baseline]
python_version = "3.13"
line_length = 120
coverage_threshold = 80

[ruff]
select = ["E", "F", "I", "B", "UP", "RUF"]

[ty]
strict = true

Why This Stack?

Performance Comparison

Task Traditional Stack Baseline Stack Speedup
Lint (50K LOC) 20s (Flake8) 0.4s (Ruff) 50x
Format (50K LOC) 8s (Black) 0.3s (Ruff) 26x
Type Check 45s (MyPy) 4.7ms (ty) 9500x
Pre-commit 18s 0.3s 60x

Tool Consolidation

Traditional Baseline
Black Ruff format
isort Ruff (I rules)
Flake8 + plugins Ruff lint
MyPy/Pyright ty
pip-audit uv audit

Claude Code Integration

This plugin bundles recommended Claude Code plugins for enhanced AI-assisted development workflows.

Install Bundled Claude Plugins

When combined with jaymd96-pants-claude-plugins:

# pants.toml
[GLOBAL]
plugins = [
    "jaymd96-pants-baseline==0.2.0",
    "jaymd96-pants-claude-plugins>=0.2.0",
]
backend_packages = [
    "pants_baseline",
    "pants_claude_plugins",
]

Then run:

pants claude-install --include-bundled ::

This automatically installs:

  • github - GitHub integration for PR workflows and issue management
  • commit-commands - Git workflow commands for commits, pushes, and PRs

Development

Setup

cd python-baseline
hatch env create

Run tests

hatch run test
hatch run test-cov

Lint and format

hatch run lint
hatch run fmt

License

Apache License 2.0

Contributing

Contributions are welcome! Please read our contributing guidelines before submitting a PR.

Credits

Built with tools from:

Metadata

Release files for jaymd96-pants-baseline 0.2.13

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for jaymd96-pants-baseline 0.2.13
File Size Uploaded
jaymd96_pants_baseline-0.2.13.tar.gz 21.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for jaymd96-pants-baseline 0.2.13
File Interpreter ABI Platform
jaymd96_pants_baseline-0.2.13-py3-none-any.whl Python 3 none any Details

Total release size: 51.6 kB

Release files / jaymd96_pants_baseline-0.2.13.tar.gz

Download URL jaymd96_pants_baseline-0.2.13.tar.gz
Size 21.6 kB
Tags Source
SHA-256 checksum
How to use checksums
5dd6eb4cbc6944d9191283aa347a66c4ce0d4d7e819956aa35b32745baabfe40
BLAKE2b-256 checksum
How to use checksums
e2fba9b16fb8257c85f1b17db89c5cb231b7a9226bda70f285e2e35a696652a5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.0

Release files / jaymd96_pants_baseline-0.2.13-py3-none-any.whl

Download URL jaymd96_pants_baseline-0.2.13-py3-none-any.whl
Size 30.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
95051b658adab40e9ee3ddf364a7085b828edae192960abe2e0a442c1a5fdb5b
BLAKE2b-256 checksum
How to use checksums
cfe615a0714bb45e29c8bb5e4ad319ab541ed37d0c42cc28429343494e6ce709
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.0

Release history Release notifications | RSS feed

This release

0.2.13 This release

2 release files

0.2.9

1 release file

0.2.8

1 release file

0.2.7

1 release file

0.2.6

1 release file

0.2.5

1 release file

0.2.4

1 release file

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.9

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page