ParLDokAdapter: Skip Hits mit leerem PDF-Link (#61 Bug 1, TH-Pipeline-Blocker)

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) <noreply@anthropic.com>
This commit is contained in:
Dotty Dotter 2026-04-09 11:53:16 +02:00
parent 6ebd7aac7a
commit 4bc583e490

View File

@ -999,16 +999,27 @@ class ParLDokAdapter(ParlamentAdapter):
} }
def _hit_to_drucksache(self, hit: dict) -> Optional[Drucksache]: 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") lp = hit.get("lp")
number = hit.get("number") number = hit.get("number")
if not lp or not number: if not lp or not number:
return None return None
link_field = hit.get("link") or hit.get("prelink") or "" link_field = hit.get("link") or hit.get("prelink") or ""
if not link_field:
return None
# Strip "#navpanes=0" fragment and prepend the prefix. # Strip "#navpanes=0" fragment and prepend the prefix.
path = link_field.split("#", 1)[0] 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( return Drucksache(
drucksache=f"{lp}/{number}", drucksache=f"{lp}/{number}",