Thanks for your interest in the Dexpace Python SDK. External pull requests are welcome — this page covers everything you need to get a change merged.
The repository is a uv-managed workspace of
five packages. One sync provisions everything in editable mode along with
the dev toolchain:
git clone https://github.com/dexpace/python-sdk.git
cd python-sdk
uv syncEvery pull request must pass the same four gates CI runs (on Python 3.12, 3.13, and 3.14):
uv run pytest -q # full test suite
uv run mypy --strict # type-check
uv run ruff check # lint
uv run ruff format --check # formattingRun them locally before opening a PR.
The full convention set lives in CLAUDE.md. The essentials:
- Python 3.12+ with modern syntax:
X | None, built-in generics, PEP 695 type parameters,from __future__ import annotationseverywhere. - Immutable models:
@dataclass(frozen=True, slots=True); mutate viadataclasses.replaceorwith_*helpers — no builders. Protocolfor SPIs,ABCfor shared behaviour.- No new runtime dependencies.
coreships against the standard library plusfurlonly; new third-party needs belong behind theHttpClientorSerdeseams, or in a new transport package. - Google-style docstrings on every public symbol; functions capped at 50 lines.
- MIT licence header (two lines) at the top of every
.pyfile, src and tests alike.
Use the prefixes the history already follows:
| Prefix | Use for |
|---|---|
feat: |
new features |
fix: |
bug fixes |
chore: |
refactors and cleanup |
docs: |
documentation-only changes |
ci: |
CI configuration |
Use the issue templates.
For security vulnerabilities, follow SECURITY.md instead of
opening a public issue.