Deploy-Befunde gefixt: Disc-Typ-Verlust, giftiger Prescan-Cache, caps-Import
Ampel / ampel (push) Failing after 28s

- Pre-Scan verlor den erkannten Typ (BDs hiessen immer "DVD"): scan()
  reicht disc_type jetzt in die Zweige durch
- GIFTIG: Cache-Key nur aus Geraetepfad — die naechste Disc im selben
  Laufwerk haette die Metadaten der vorherigen geerbt. Key enthaelt jetzt
  einen Disc-Fingerabdruck (Label|Groesse)
- Worker-Faehigkeiten: import caps auf Modulebene — im worker_ready-Signal
  war /app nicht mehr im sys.path (ModuleNotFoundError im Deploy-Log)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Hitonabi
2026-07-23 20:54:14 +02:00
parent b584cc29ad
commit 7652afe955
3 changed files with 26 additions and 8 deletions
+8 -3
View File
@@ -30,10 +30,15 @@ FALLBACK_YEAR: Final[int] = 2000
FALLBACK_TITLE: Final[str] = "Unbekannter Titel"
def generate_prescan_key(device_path: str, is_audio: bool = False) -> str:
"""Generiere Cache-Key für Pre-Scan."""
def generate_prescan_key(device_path: str, is_audio: bool = False, fingerprint: str = "") -> str:
"""Generiere Cache-Key für Pre-Scan.
fingerprint (Label+Größe der DISC) ist Pflichtbestandteil seit 23.07.:
Ein Key nur aus dem Gerätepfad servierte der NÄCHSTEN Disc im selben
Laufwerk die Metadaten der vorherigen.
"""
prefix = PRESCAN_AUDIO_PREFIX if is_audio else PRESCAN_VIDEO_PREFIX
return f"{prefix}{device_path}"
return f"{prefix}{device_path}:{fingerprint}"
def generate_confirmed_key(title: str, year: Optional[int] = None) -> str:
+12 -2
View File
@@ -143,6 +143,16 @@ class PreScan:
"""Führe Pre-Scan durch."""
disc_type = self._detect_disc_type(device_path)
toc = self._read_toc(device_path, disc_type)
# Typ + Disc-Fingerabdruck (Label|Größe) an die Zweige durchreichen —
# der Typ ging vorher verloren (BDs hießen immer "DVD"), und der
# Cache-Key braucht den Fingerabdruck (sonst erbt die nächste Disc
# die Metadaten der vorherigen).
toc["disc_type"] = disc_type
try:
groesse = detection.disc_size_bytes(device_path)
except OSError:
groesse = 0
toc["fingerprint"] = f"{toc.get('title') or 'unbekannt'}|{groesse}"
if disc_type == "CD":
return self._scan_audio(device_path, toc)
@@ -214,7 +224,7 @@ class PreScan:
def _scan_audio(self, device_path: str, toc: Dict) -> PreScanResult:
"""Pre-Scan für Audio-CD."""
cache_key = generate_prescan_key(device_path, is_audio=True)
cache_key = generate_prescan_key(device_path, is_audio=True, fingerprint=toc.get("fingerprint", ""))
cached = get(cache_key)
if cached:
return PreScanResult(**cached)
@@ -267,7 +277,7 @@ class PreScan:
def _scan_video(self, device_path: str, toc: Dict) -> PreScanResult:
"""Pre-Scan für DVD/Blu-ray."""
cache_key = generate_prescan_key(device_path, is_audio=False)
cache_key = generate_prescan_key(device_path, is_audio=False, fingerprint=toc.get("fingerprint", ""))
cached = get(cache_key)
if cached:
return PreScanResult(**cached)