From 4bc583e490ba38f81d9322f3879aacdb2fba2514 Mon Sep 17 00:00:00 2001 From: Dotty Dotter Date: Thu, 9 Apr 2026 11:53:16 +0200 Subject: [PATCH] ParLDokAdapter: Skip Hits mit leerem PDF-Link (#61 Bug 1, TH-Pipeline-Blocker) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Live-Verifikation in der Container-DB hat aufgedeckt, dass TH ParlDok für sehr frische Vorlagen (z.B. 8/1594, datum 2026-03-31, allowed=false) ``link``/``prelink`` als leeren String liefert — das PDF ist noch nicht zur Veröffentlichung freigegeben. Bisheriges Verhalten: Adapter konstruierte einen Drucksache-Eintrag mit ``link=''``, der dann durch die Pipeline rutschte und im Frontend als unklickbarer Eintrag erschien. ``download_text()`` würde später an ``not doc.link`` scheitern, was die Analyse blockt. Sauberer Skip an der Quelle: ``_hit_to_drucksache`` returnt None, wenn weder ``link`` noch ``prelink`` einen Pfad liefern. Das ist konsistent mit den anderen None-Returns für unbrauchbare Hits (kein lp, kein number). Lokal verifiziert: 176 Unit-Tests grün. Live-Verifikation gegen Production folgt nach Deploy via Sub-A-Test im Container. Refs: #61 (Bug 1: TH leerer Link) Co-Authored-By: Claude Opus 4.6 (1M context) --- app/parlamente.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/app/parlamente.py b/app/parlamente.py index 063b764..87dcb8a 100644 --- a/app/parlamente.py +++ b/app/parlamente.py @@ -999,16 +999,27 @@ class ParLDokAdapter(ParlamentAdapter): } def _hit_to_drucksache(self, hit: dict) -> Optional[Drucksache]: - """Convert one ParlDok JSON hit to a Drucksache. None if unusable.""" + """Convert one ParlDok JSON hit to a Drucksache. None if unusable. + + ParlDok markiert frische Vorlagen mit leerem ``link``/``prelink`` + wenn das PDF noch nicht freigegeben ist (z.B. TH 8/1594, datum + 2026-03-31, ``allowed: false``). Solche Hits sind für unsere + Pipeline wertlos — `download_text` würde an `not doc.link` + scheitern und das Frontend würde einen unklickbaren Eintrag + anzeigen. Sauberer Skip an dieser Stelle. Issue #61, Bug 1. + """ lp = hit.get("lp") number = hit.get("number") if not lp or not number: return None link_field = hit.get("link") or hit.get("prelink") or "" + if not link_field: + return None + # Strip "#navpanes=0" fragment and prepend the prefix. path = link_field.split("#", 1)[0] - pdf_url = f"{self.base_url}{self.prefix}{path}" if path else "" + pdf_url = f"{self.base_url}{self.prefix}{path}" return Drucksache( drucksache=f"{lp}/{number}",