Contributing
Prerequisites
Python >=3.12
UV package manager
Getting Setup
The fastsandpm tool chain uses uv as its packaging and tool running utility.
Development Workflow
Testing - pytest
Unit tests validate functionality and are stored in the ./tests/ directory.
uv run pytest # Run all unit tests
uv run pytest tests/test_module.py::test_function # Run specific test
Type Checking - mypy
Catches type-related errors at development time, ensuring code reliability.
uv run mypy
Code Quality - ruff
Enforces PEP8 compliance and catches common bugs automatically.
uv run ruff check # Check code style
uv run ruff check --fix # Auto-fix style issues
Integration Testing - tox
Runs all test suites across Python versions and environments to ensure compatibility.
uv run tox # Run all test suites
uv run tox p # Run tests in parallel (faster)
Code Formatting Guidelines
All Python code must comply with PEP 8.
Project-specific settings are configured in pyproject.toml:
Line length: 100 characters
Python version: 3.12+
Import sorting: enabled (isort)
Quote style: double quotes
Branching and Commit Conventions
Branch Naming
Use the following format for branch names:
feature/*- New features (e.g.,feature/add-export-functionality)bugfix/*- Bug fixes (e.g.,bugfix/fix-yaml-parsing)docs/*- Documentation updateschore/*- Maintenance tasks
Commit Messages
Use the following format for commit messages:
(BREAKING) description
Optional body with more details
Where the BREAKING part is only appended for breaking API changes which will require a major version bump.
Before Making a PR
Ensure all of the following are complete:
[ ] All tests pass:
uv run tox(oruv run tox pfor parallel)[ ] Code is formatted:
uv run ruff check --fix[ ] Type checking passes:
uv run mypy
[ ] CHANGELOG.md updated with your changes
[ ] Documentation updated (docstrings, README, docs/)
[ ] Branch follows naming convention:
feature/*,bugfix/*, etc.[ ] Commit messages follow Conventional Commits format
[ ] PR description clearly explains the changes and motivation
Debugging Tips
Running Specific Tests
# Run tests matching a pattern
uv run pytest -k "pattern"
# Run with verbose output
uv run pytest -v
# Show print statements
uv run pytest -s
# Stop on first failure
uv run pytest -x
Type Checking with Details
# Show detailed error information
uv run mypy --show-error-codes --show-error-context
Building Documentation Locally
uv run tox -e docs_html # Build HTML docs
uv run tox -e docs_dirhtml # Build dirhtml docs
Common Issues and Troubleshooting
UV Command Not Found
Ensure
uvis installed and in your PATHTry
python -m pip install uvCheck with your VDT team if using module-based installation
Import Errors When Running Tests
Ensure you’re running commands with
uv run(not directly)Try:
uv syncto update dependencies
Tests Pass Locally but Fail in CI
Run the full test suite:
uv run tox(not justpytest)Check Python version:
python --version(must be 3.12+)