"""Einstellungen, ausschliesslich aus Umgebungsvariablen. Nichts davon steht im Code oder im Image: Passwort und Pfade kommen beim Start von aussen. Ohne gesetztes Passwort bleibt der Erfassungsbereich gesperrt (siehe Phase 3) - ein mitgeliefertes Standardpasswort wäre öffentlich bekannt und damit keines. """ from functools import lru_cache from pathlib import Path from pydantic_settings import BaseSettings, SettingsConfigDict class Einstellungen(BaseSettings): model_config = SettingsConfigDict(env_file=".env", extra="ignore") # Ablageorte. Im Container zeigen beide auf eingehängte Volumes, damit # Datenbank und Bilder einen Neustart überleben. datenbank_pfad: Path = Path("data/kleiderboerse.sqlite") upload_pfad: Path = Path("uploads") # Passwort für den Erfassungsbereich. Leer = gesperrt. admin_passwort: str = "" admin_passwort_hash: str = "" # Grösse eines einzelnen Bild-Uploads. Greift zusätzlich zur Prüfung in # images.py; ein Handyfoto liegt heute bei 3-12 MB. max_upload_bytes: int = 10 * 1024 * 1024 @property def datenbank_url(self) -> str: return f"sqlite:///{self.datenbank_pfad}" @lru_cache def einstellungen() -> Einstellungen: """Einmal lesen und merken - die Werte ändern sich zur Laufzeit nicht.""" return Einstellungen()