[build-system] requires = ["setuptools>=77"] build-backend = "setuptools.build_meta" [project] name = "nodvard-deck" version = "0.13.0" description = "Nodvard Deck — generischer Kern einer modularen Self-Hosting-Plattform." requires-python = ">=3.12" license = "PolyForm-Noncommercial-1.0.0" authors = [{ name = "Nico Benks" }] dependencies = [ "nodvard-sdk", "fastapi>=0.121", # Depends(..., scope="function"), siehe api/deps.py "uvicorn[standard]>=0.30", "pydantic>=2.7", "pydantic-settings>=2.4", # [asyncio] zieht greenlet -- ab SQLAlchemy 2.1 nicht mehr automatisch dabei (live # gefunden: der Pi-Build zog 2.1.0, Lattice startete nicht). 2.1 erst nach eigenem Test. "sqlalchemy[asyncio]>=2.0.30,<2.1", "aiosqlite>=0.22", "alembic>=1.13", "asyncssh>=2.14", "cryptography>=43", "argon2-cffi>=23.1", # Sicherungen im age-Format (core/backup/crypto.py). MIT; das Rust-`rage` darin ist # MIT/Apache-2.0. Wheels (abi3) fuer linux x86_64 und aarch64. "pyrage>=1.4,<2", "pyotp>=2.9", # SVG-Uploads (svg_safe.py): XML ohne Entitaeten und externe Verweise lesen. PSF-2.0. "defusedxml>=0.7.1", "apscheduler>=3.10,<4", # 4.x ist eine andere API "structlog>=24.1", "httpx>=0.27", # >=15: `connect(proxy=None)` (ext/context.py, ctx.http.websocket). Aeltere Versionen kennen das Keyword nicht # und reichen es an loop.create_connection() weiter (TypeError); seit 15 nutzt connect() sonst Proxys aus der Umgebung. "websockets>=15", "python-multipart>=0.0.9", "pyjwt>=2.9", "dulwich>=1.2.19,<1.3", # 1.2.19: Sicherheitskorrekturen beim Lesen fremder Git-Daten (Stacks aus Git) "pytesseract>=0.3.10", "Pillow>=10.4", # documents-Extension (ocr.py). Extensions werden per Verzeichnis gescannt und haben # keine eigene Paketdatei -- ihre Python-Abhaengigkeiten stehen deshalb hier im Kern. # pypdfium2 (Apache-2.0/BSD) statt PyMuPDF (AGPL), damit die kommerzielle Lizenz moeglich bleibt. "pypdfium2>=4.30", # Zeitzonen-Datenbank (Einstellung `system.timezone`, core/timezone.py): zoneinfo liest sonst # die Systemdateien, die das schlanke Image nicht hat (unter Windows nie). Apache-2.0. "tzdata>=2024.1", ] [project.optional-dependencies] dev = [ "pytest>=8.3", "pytest-asyncio>=0.24", "ruff>=0.6", ] [tool.setuptools.packages.find] where = ["src"] include = ["nodvard_deck*"] # Aenderungsprotokoll: die TOML-Dateien muessen ins Wheel, sonst fehlen sie im # Docker-Image (`pip install ./backend` ist NICHT editierbar). `versions/` und # `unreleased/` sind keine Python-Pakete, deshalb hier per Muster. [tool.setuptools.package-data] "nodvard_deck" = ["changelog/editions.toml"] "nodvard_deck.changelog" = ["versions/*.toml", "unreleased/*.toml"] [tool.pytest.ini_options] asyncio_mode = "auto" testpaths = ["tests"] markers = [ "needs_root: braucht root (meist mit CAP_CHOWN fuer Dateien eines anderen Besitzers); sonst uebersprungen. Die CI fuehrt sie in einem eigenen Lauf als root aus.", ]