# Einheiten: backend/tft/constants/loader.py stand: f41ac76b5789 ## backend/tft/constants/loader.py::load_constants beschreibung: Lädt die TOML-Konstantendatei für ein gegebenes Set und gibt das eingelesene Dict zurück. input: set_number (int) – die zu ladende Set-Nummer. output: dict – die deserialisierten Konstanten aus der TOML-Datei. entscheidungen: - Fehlt die Set-Datei, bricht der Lader mit einer FileNotFoundError ab und gibt einen Hinweis zur Behebung. beleg: "if not path.exists():" - Die Datei wird im Binary-Modus geöffnet, da tomllib rohe Bytes erwartet. beleg: "with path.open(\"rb\") as f:" - Geladene Werte werden unmittelbar über validate einer Konsistenzprüfung unterzogen. beleg: "validate(c)" kanten: - ruft-auf: backend/tft/constants/loader.py::validate ## backend/tft/constants/loader.py::validate beschreibung: Validiert die Struktur und Plausibilität der geladenen Konstanten und wirft bei Verstößen ValueError. input: c (dict) – das zuvor aus TOML geladene Konstanten-Dict. output: None – signalisiert Gültigkeit durch stilles Zurückkehren oder Auslösen einer Ausnahme. entscheidungen: - Jede Shop-Odds-Zeile muss genau 5 Einträge besitzen. beleg: "if len(row) != 5:" - Die Pool-Größenliste muss exakt 5 Kostenstufen umfassen. beleg: "if len(c[\"pool\"][\"sizes\"]) != 5:" - Die Anzahl der XP-Stufen-Übergänge muss zur maximalen Stufe passen (to_next = max_level − 1). beleg: "if len(xp[\"to_next\"]) != xp[\"max_level\"] - 1:" - Die streak_gold-Tabelle muss aufsteigend nach Streak-Länge sortiert sein. beleg: "if streaks != sorted(streaks):" - Jede Shop-Odds-Zeile muss in Summe genau 100 ergeben. beleg: "if sum(row) != 100:" kanten: - wird-genutzt-von: backend/tft/constants/loader.py::load_constants