# Einheiten: backend/tft/matches/riot.py stand: f41ac76b5789 ## backend/tft/matches/riot.py::_load_env beschreibung: Lädt Variablen aus backend/.env in os.environ, sofern die Datei existiert. input: keine Argumente; liest backend/.env relativ zum Repo-Root. output: füllt fehlende Umgebungsvariablen in os.environ (None). entscheidungen: - Nur vorhandene Schlüssel werden gesetzt, bestehende Werte bleiben unangetastet. beleg: "os.environ.setdefault(key.strip(), value.strip())" - Kommentarzeilen und Zeilen ohne "=" werden ignoriert. beleg: "if line and not line.startswith(\"#\") and \"=\" in line:" - Fehlt die .env-Datei, wird der Ladevorgang still beendet. beleg: "if not env_file.exists():" anker: paths kanten: ## backend/tft/matches/riot.py::api_key beschreibung: Liefert den Riot-API-Key aus der Umgebung und bricht bei fehlendem Key ab. input: keine Argumente; liest RIOT_API_KEY aus os.environ. output: den Riot-API-Key als String oder beendet den Prozess via SystemExit. entscheidungen: - Vor dem Auslesen wird die .env-Datei nachgeladen. beleg: "_load_env()" - Ohne gesetzten Key wird das Programm mit klarer Anleitung beendet. beleg: "raise SystemExit(" - Der Fehlerhinweis nennt den Bezugsort backend/.env. beleg: "put it in backend/.env" kanten: - ruft-auf: backend/tft/matches/riot.py::_load_env ## backend/tft/matches/riot.py::RiotClient beschreibung: Dünner Wrapper für die Riot-API mit Rate-Limiting, 429-Retry und nutzbaren TFT-Endpunkten. input: Hostname, Pfad, Query-Parameter und ggf. PUUID/Match-ID des Aufrufers. output: JSON-Antwort der Riot-API als dict oder list, bzw. aggregierte Ladder-Einträge. entscheidungen: - Vor jedem Request wird mindestens SLEEP Sekunden gewartet, um das Dev-Key-Limit einzuhalten. beleg: "time.sleep(SLEEP)" - Bei HTTP 429 wird anhand von Retry-After erneut gesendet. beleg: "if resp.status_code == 429:" - Bei 401/403 wird der Prozess mit Hinweis beendet statt eine Exception weiterzureichen. beleg: "if resp.status_code in (401, 403):" - Der API-Key wird als X-Riot-Token-Header übergeben. beleg: "headers={\"X-Riot-Token\": self.key}, timeout=30" - setdefault verhindert das Überschreiben vorhandener Env-Variablen. beleg: "os.environ.setdefault(key.strip(), value.strip())" kanten: - ruft-auf: backend/tft/matches/riot.py::api_key