Files
rippy/docker/api/config_validation.py
T
Hitonabi 95c1f9b105 feat(ui): SoC Refactoring & Config Validation
- Theme Context ausgelagert (ThemeContext.tsx + useDarkMode.ts)
- Config Validation mit TMDB-API-Key Pflicht (config_validation.py)
- Cache Key Centralization (cache/keys.py)
- CD-Ripping mit abcde implementiert (Worker)
- Docker Compose mit Healthchecks & LOG_LEVEL
- ROADMAP.md & SAVEPOINT.md aktualisiert
2026-07-22 16:38:19 +02:00

59 lines
1.8 KiB
Python

"""Validation für Rippy Configuration."""
from typing import Optional
from pydantic import ValidationError
from config import Settings
class ConfigValidationError(Exception):
"""Wird geworfen, wenn die Konfiguration ungültig ist."""
pass
def validate_config() -> Settings:
"""Validiere Konfiguration und wirf Fehler bei fehlenden Pflicht-Werten."""
try:
settings = Settings()
# TMDB API Key ist Pflicht (gemäß KONZEPT.md)
if not settings.tmdb_api_key:
raise ConfigValidationError(
"TMDB_API_KEY ist erforderlich für Metadaten-Lookup.\n"
"Hole dir einen免费en Key auf https://www.themoviedb.org/\n"
"Setze ihn als Umgebungsvariable: TMDB_API_KEY=dein_key"
)
return settings
except ValidationError as e:
raise ConfigValidationError(f"Konfigurationsfehler: {e}")
def get_config_with_fallback() -> tuple[Settings, list[str]]:
"""Hole Konfiguration mit Fallback-Werten für optionale Felder.
Returns:
tuple: (Settings, List of warnings)
"""
settings = Settings()
warnings = []
# Optional: TVDb API Key (Fallback auf TMDB)
if not settings.thetvdb_api_key:
warnings.append(
"THETVDB_API_KEY nicht gesetzt. TheTVDB-Fallback wird verwendet."
)
# Optional: MusicBrainz User (Fallback auf öffentlichen Zugriff)
if not settings.musicbrainz_user:
warnings.append(
"MUSICBRAINZ_USER nicht gesetzt. Öffentlicher Zugriff wird verwendet."
)
# Optional: JWT Secret (wird generiert, wenn nicht gesetzt)
if not settings.jwt_secret_key:
warnings.append(
"JWT_SECRET_KEY nicht gesetzt. Auto-Generierung wird verwendet."
)
return settings, warnings