5528e0f652
- clients/omdb.py: OMDb als zweite Quelle (Fallback-Kette: TMDB exakt ->
OMDb -> bester TMDB-Vorschlag mit niedriger Confidence -> unknown)
- Pre-Scan-Reparatur: Titel kam nie an — makemkvcon existiert nur im
Worker, isosize war nirgends installiert (fiel still auf "DVD" zurueck).
Jetzt: ISO-9660-Volume-Label direkt vom Medium + Label-Normalisierung
(PULP_FICTION -> Pulp Fiction), Disc-Typ ueber zentrale detection.py
- POST /devices/{name}/eject (CDROMEJECT-ioctl) mit Job-Schutz (409 wenn
auf dem Laufwerk gerade gerippt wird)
- OMDB_API_KEY in compose/.env.example; .env.example komplett ehrlich
dokumentiert (JWT-Pflicht, MakeMKV-Beta-Key-Rhythmus)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
41 lines
1.6 KiB
Python
41 lines
1.6 KiB
Python
"""API-Konfiguration."""
|
|
|
|
from pydantic_settings import BaseSettings
|
|
from pydantic import Field
|
|
from typing import Optional
|
|
|
|
|
|
class Settings(BaseSettings):
|
|
"""Rippy API Settings."""
|
|
|
|
# API Keys
|
|
tmdb_api_key: Optional[str] = Field(default=None, description="TMDB API Key (Pflicht für Metadaten-Lookup)")
|
|
thetvdb_api_key: Optional[str] = Field(default=None, description="TVDb API Key (Optional)")
|
|
omdb_api_key: Optional[str] = Field(default=None, description="OMDb API Key (Fallback-Quelle, optional)")
|
|
musicbrainz_user: Optional[str] = Field(default=None, description="MusicBrainz User (Optional)")
|
|
|
|
# Cache
|
|
cache_ttl: int = Field(default=86400, ge=3600, le=604800, description="Cache TTL in Sekunden (1h - 7d)")
|
|
|
|
# Ripping
|
|
rip_output_dir: str = Field(default="/app/media", description="Basisverzeichnis für Ripping-Ergebnisse")
|
|
temp_dir: str = Field(default="/app/temp", description="Temp-Verzeichnis für Ripping")
|
|
|
|
# Logging
|
|
log_level: str = Field(default="INFO", pattern="^(DEBUG|INFO|WARNING|ERROR|CRITICAL)$", description="Log Level")
|
|
|
|
# JWT — PFLICHT (auth.py verweigert den Start ohne; kein Zufalls-Fallback mehr)
|
|
jwt_secret_key: Optional[str] = Field(default=None, description="JWT Secret Key (PFLICHT, siehe .env)")
|
|
|
|
# Admin-Login (MVP — vorher hartkodiert admin/rippy123 in main.py)
|
|
admin_username: str = Field(default="admin", description="Admin-Benutzername")
|
|
admin_password: str = Field(default="rippy123", description="Admin-Passwort (per .env ÄNDERN!)")
|
|
|
|
class Config:
|
|
env_file = ".env"
|
|
env_file_encoding = "utf-8"
|
|
|
|
|
|
settings = Settings()
|
|
|