Ctrl K
ComunidadGuías…

backend/pyproject.toml

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
[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.",
]