Thank you for your interest in contributing to abovepy! This guide will help you get started.
- Fork the repository on GitHub
- Clone your fork locally:
git clone https://github.com/YOUR-USERNAME/abovepy.git cd abovepy - Install in development mode:
pip install -e ".[dev,docs]"
feature/description— new functionalityfix/description— bug fixesdocs/description— documentation changesrefactor/description— code improvements without behavior changes
# Unit tests (no network required)
pytest tests/ -v
# Integration tests (hits live STAC API)
pytest tests/ -m integration -v
# Full suite with coverage
pytest tests/ --cov=abovepy --cov-report=term-missingWe use ruff for linting and formatting, and mypy for type checking:
ruff check src/ tests/
ruff format --check src/ tests/
mypy --strict src/abovepy/All three must pass before merging. CI runs these automatically.
- Line length: 100 characters
- Target: Python 3.10+
- Type annotations: Required on all public functions (
mypy --strict) - Imports: Use
httpx(notrequests). Lazy-import optional deps (laspy,boto3,pdal) - Docstrings: NumPy style
- One
search()function — product is a parameter, not a separate module - Product keys map to STAC collection IDs internally (
dem_phase3->dem-phase3) - All bbox inputs accept EPSG:4326; KyFromAbove native CRS is EPSG:3089
- No credentials required — the S3 bucket is public
- Return types:
search()-> GeoDataFrame,download()-> list[Path],read()-> (ndarray, profile)
See docs/architecture.md for the full design.
- Create a feature branch from
main - Make your changes with clear, focused commits
- Ensure all tests pass and linting is clean
- Open a Pull Request with:
- A clear title describing the change
- A summary of what and why
- Any relevant issue numbers
Open an issue with:
- Python version and OS
- abovepy version (
python -c "import abovepy; print(abovepy.__version__)") - Minimal code to reproduce the problem
- Full traceback if applicable
Open an issue describing:
- The use case or problem you're trying to solve
- How you'd expect the API to work
- Any relevant KyFromAbove data products or workflows
By contributing, you agree that your contributions will be licensed under the GPL-3.0 License.