-
Notifications
You must be signed in to change notification settings - Fork 0
Entwicklung
Diese Seite beschreibt das Entwicklungs-Setup der Bibliothek selbst sowie den Workflow im Verbund mit den beiden Schwester-Repositories.
git clone https://github.com/mschabhuettl/libopenschichtplaner5.git
cd libopenschichtplaner5
python -m venv .venv && . .venv/bin/activate
pip install -e ".[dev,postgres]"Das dev-Extra installiert pytest, pytest-cov und ruff; das postgres-Extra
psycopg2-binary für die PostgreSQL-Tests bzw. -Backends.
pytest # Testsuite (187 Tests)
ruff check . # LintingDie Suite läuft komplett ohne externe Dienste: DBF-Tests arbeiten mit selbstgebauten
Mini-DBF-Dateien in Temp-Verzeichnissen, ORM-Tests mit In-Memory-SQLite. Abgedeckt
werden u. a. der ORM-Layer inkl. Sync-Härtefällen, die Rechenschicht
(Berechnungen), DBF-Roundtrips mit Overflow-/Datums-Guards, die Byte-Parität des
Schreibpfads inkl. -L-Journal/CDX/PACK, das CLI, die DBF↔PostgreSQL-Äquivalenz
der Auswertungen und Thread-Sicherheit.
Optional läuft eine zusätzliche Regressionssuite gegen eine lokale Original- Beispieldatenbank von Schichtplaner 5 (lokales Referenzmaterial, wird nie committet):
SP5_GOLDEN_DB=/pfad/zu/sp5/Daten pytest tests/test_golden_sample_db.py -vOhne gesetzte Variable SP5_GOLDEN_DB überspringt sich das Modul selbst.
Die Dockerfile-Stage test führt Lint + Tests in einer definierten Umgebung aus
(python:3.12-slim):
docker compose run --rm test
# gleichwertig:
docker build --target test -t libopenschichtplaner5:test . && docker run --rm libopenschichtplaner5:test-
ruff ist der Linter (Regelgruppen
E,W,F,I,B,UP; Zeilenlänge 100, Ziel Python 3.10) — Konfiguration inpyproject.toml. - Das Paket ist vollständig typannotiert (
py.typed). - Versionierung nach SemVer, Änderungen werden im CHANGELOG (Keep-a-Changelog-Format) gepflegt.
-
CI (GitHub Actions):
ruff+pytestauf Python 3.10–3.12 für jeden Push/PR. -
Release: Ein
v*-Tag baut sdist + wheel und veröffentlicht nach PyPI über Trusted Publishing (OIDC, keine gespeicherten Tokens). Ein manuellerworkflow_dispatchmacht einen TestPyPI-Probelauf.
Die drei Projekte sind unabhängige Repositories und werden als
Geschwisterverzeichnisse ausgecheckt, damit die ../-Pfade auflösen:
~/Projects/
├── libopenschichtplaner5/ # diese Bibliothek (sp5lib)
├── openschichtplaner5-api/ # REST-API (sp5api)
└── openschichtplaner5/ # Web-App (Frontend + Compose)
-
Release-Pfad: Die API deklariert
libopenschichtplaner5[postgres]>=1.7.0(PyPI); die App hängt von der API und direkt von der Bibliothek ab. -
Editable-Workflow: Wer alle drei Repos gemeinsam entwickelt, installiert die Bibliothek (und die API) editierbar in das jeweilige venv:
# im App-Repo: Library + API aus den lokalen Schwester-Clones verlinken make dev-link # im API-Repo: pip install -e "../libopenschichtplaner5[postgres]"
Änderungen an
sp5libsind dann ohne Re-Installation sofort in API und App wirksam.
Dokumentation der Schwesterprojekte: App-Wiki · API-Wiki.
| Variable | Wirkung |
|---|---|
DB_BACKEND |
Backend-Wahl: dbf (Default) oder postgresql
|
DATABASE_URL |
Verbindungs-URL für das PostgreSQL-Backend |
SP5_DB_PATH |
Pfad zum DBF-Datenverzeichnis für db_factory.get_database()
|
SP5_BACKEND_DIR |
Backend-Verzeichnis der Host-App (JSON-Nebendaten, Alembic-Struktur) |
AUTO_MIGRATE / AUTO_BACKUP
|
Startup-Migration bzw. Backup davor ein-/ausschalten |
SP5_SMTP_HOST/PORT/USER/PASSWORD/FROM/TLS/ENABLED, SP5_APP_URL
|
E-Mail-Versand (email_service) |
SP5_GOLDEN_DB |
nur Tests: Pfad zur Original-Beispieldatenbank für die Golden-Suite |
Home — Startseite
- Installation — PyPI, Git, Docker
-
CLI — Das
sp5lib-Kommando
- Datenbankformat — DBF/CDX aus Nutzersicht
- Berechnungen — Soll/Ist, Konten, Zuschläge
-
ORM-und-Sync — SQLAlchemy-Spiegel &
sync_all
-
API-Referenz —
SP5Database& Module
- Entwicklung — Setup, Tests, Repo-Verbund