Developer Guide
Quick Start
# Clone and setup
git clone https://github.com/UNFmontreal/skullduggery.git
cd skullduggery
python -m venv venv
source venv/bin/activate
pip install -e ".[test,datalad]"
Project Structure
skullduggery/
├── src/skullduggery/
│ ├── run.py # CLI entry point
│ ├── workflow.py # Main defacing pipeline
│ ├── align.py # ANTs registration
│ ├── mask.py # Mask generation
│ ├── bids.py # BIDS utilities
│ ├── template.py # Template handling
│ ├── report.py # Report generation
│ └── utils.py # Helpers
├── tests/ # Unit tests
├── docs/ # Documentation
└── pyproject.toml # Project config
Development Tasks
Tests
pytest tests/ # All tests
pytest tests/test_bids.py -v # Single file
pytest tests/ --cov=skullduggery # With coverage
Code Quality
black src/skullduggery tests # Format
flake8 src/skullduggery tests # Lint
pre-commit install # Auto-checks
Documentation
cd docs
make html # Build docs
Docstring Format
Use Google-style docstrings:
def process_image(path: str, template: str) -> bool:
"""Brief one-liner description.
More detailed explanation if needed.
Args:
path: Input file path.
template: Template name.
Returns:
True if successful.
Raises:
ValueError: If inputs are invalid.
"""
Adding Features
Create feature branch from
mainWrite tests first
Implement feature
Run:
pytest tests/ && flake8 src/Update docs if needed
Submit PR
Dependencies
Core: templateflow, pybids, nibabel, antspyx, nitransforms, nireports, coloredlogs
Optional: datalad (DataLad support)
Dev: specified in pyproject.toml
Debugging
DEBUG=1 skullduggery /path/to/dataset --debug debug
Or add breakpoint in code:
import pdb; pdb.set_trace()
Common Issues
Issue |
Solution |
|---|---|
|
|
ANTs registration fails |
|
Tests fail |
|
Contributing
Keep commits atomic and meaningful
Follow PEP 8
Include tests for new code
Update docstrings
Ensure all tests pass (
pytest tests/)
Questions? Open an issue on GitHub