"""Umgebungsvariablen lesen. Alle Einstellungen heißen ``VOGELALBUM_``. Diese Datei kennt bewusst **keine** Django-Abhängigkeit — sie wird vom Detektor, von der Web-App und von der Home-Assistant-Brücke gleichermaßen benutzt, und die drei haben nicht dieselben Pakete installiert. """ from __future__ import annotations import os PRAEFIX = "VOGELALBUM" def hole(name: str, default: str | None = None) -> str | None: """Liest ``VOGELALBUM_``. ``name`` ist der Teil hinter dem Präfix, also ``"SOURCE"`` für ``VOGELALBUM_SOURCE``. 🔑 **Ein ausdrücklich leerer Wert schlägt den Vorgabewert.** Das ist kein Zufall, sondern trägt eine Bedeutung: Ein leerer Ingest-Token heißt „Endpunkt zu", nicht „nimm den Standard". Wer hier ``or default`` schriebe, machte aus einer bewussten Abschaltung stillschweigend wieder eine Öffnung. """ wert = os.environ.get(f"{PRAEFIX}_{name}") if wert is None: return default return wert def gesetzt(name: str) -> bool: """Ob die Variable überhaupt vorhanden ist. Nötig, weil ein **leerer** Wert etwas anderes bedeutet als ein fehlender: Ein leerer Ingest-Token schaltet den Endpunkt ab, ein fehlender lässt den Vorgabewert gelten. """ return os.environ.get(f"{PRAEFIX}_{name}") is not None