Deploy-Befunde gefixt: Disc-Typ-Verlust, giftiger Prescan-Cache, caps-Import
Ampel / ampel (push) Failing after 28s
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:
Vendored
+8
-3
@@ -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:
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user