Scraper BW: Baden-Württemberg (PARLIS, Wahl 2031-03-08) #29
Labels
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: tobias/gwoe-antragspruefer#29
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Wahltermin
2031-03-08 — Baden-Württemberg (BW), aktuell 17. Wahlperiode.
Backend
PARLISbw17/12345Adapter-Strategie
PARLIS — eigenständiges System, kein direkter Adapter wiederverwendbar.
BWAdapterexistiert als Stub inparlamente.pyZ. ~833. Vor 2031 noch viel Zeit; vermutlich erst nach dem 18. Landtag (Konstituierung Mai 2026 laut Anmerkung) sinnvoll, weil sich danach die WP ändert.Was zu tun ist
webapp/app/parlamente.pyimplementieren — entweder als neue Subklasse vonParlamentAdapteroder als zweiter Registry-Eintrag eines existierenden parametrisierbaren Adapters.ADAPTERS-Registry am Ende der Datei.ADAPTERS["BW"].search("Schule", limit=10)liefert echte Anträge mit Datum + Fraktionen, sortiert newest-first.Hängt mit … zusammenunten) — dieses Issue ist nur der Adapter selbst, nicht das Indexieren der Wahlprogramme oder das Frontend-aktiv-Setzen.Akzeptanzkriterien
parlamente.py::ADAPTERS["BW"]existiert und ist instanziierbarsearch(query="Schule", limit=10)liefert ≥3 echte Drucksachen mit korrektem Datum, Fraktionen, PDF-Linkget_document(drucksache)für eine reale Drucksache der laufenden WP liefert das Dokument zurückdownload_text(drucksache)extrahiert Text aus dem PDFHinweise aus dokukratie/bw.yml + portala.query.bw.json — PARLIS ist portala-Engine!
Riesige Wiederverwendungs-Möglichkeit: PARLIS auf
parlis.landtag-bw.deläuft auf demselben portala/eUI-Framework wie LSA-PADOKA und BE-PARDOK. Der existierendePortalaAdapteraus #2/#3 ist direkt wiederverwendbar.https://parlis.landtag-bw.de/parlis/browse.tt.jsonhttps://parlis.landtag-bw.de/parlis/report.tt.html"Star"(lautportala.query.bw.json)"suchergebnis-vorgang-full""SORT01/D SORT02/D SORT03"(vs.WEVSO1/D WEVSO2 WEVSO3bei LSA/BE)l1: legislative_terml2: start_datel3: end_datel4: document_type.//div[contains(@class, "efxRecordRepeater")]— gleicher class-Name wie BE-Cards.//a[@class="efxZoomShort-Vorgang"].//dl/dt[contains(text(), "Initiative")]/following-sibling::dd[1]/text().//dl/dt[contains(text(), "Vorgangs-ID")]/following-sibling::dd[1]/text()Adapter-Patch: Im
_build_search_bodymuss BW eine eigene Variante haben weillines-Schema (l1/l2/l3/l4) undformat/sortanders sind als LSA. Vermutlich am sinnvollsten als optionaler Parameter inPortalaAdapter.__init__oder als SubklassePARLISAdapter(PortalaAdapter).Registry-Eintrag (ungefährer Vorschlag):
Zeitlicher Kontext: Wahl ist 2031, der 18. Landtag konstituiert sich nach der vorherigen Wahl im März 2026 (aktuell geschäftsführend) — die WP 17 endet bald, 18 fängt an. Vor Implementierung muss
bundeslaender.py::BW.wahlperiodeaktualisiert werden.Erledigt in
db5a875.Was im Commit ist
Neue Klasse
PARLISAdapter(statt PortalaAdapter-Subklasse, weil Body-Schema, Polling und Hit-Format alle anders sind als bei LSA/BE).lines.2/3/4/10/11/20.x/90.x+ parsed + json-Treelines.l1/l2/l3/l4, kein parsed/jsonsr_generic1vorganggeneric1-fullsuchergebnis-vorgang-fullWEVSO1/D WEVSO2 WEVSO3SORT01/D SORT02/D SORT03lsa.lissh/lah.lisshStarReverse-Engineering-Quellen
dokukratie/scrapers/portala.query.bw.jsonfür das Body-Skelettesearch-ui.main.jsZ. ~1268 (requestReportOK) für das Polling-Pattern: wenn nursearch_idzurückkommt, mitaction=SearchAndDisplay, id=<search_id>ohne search-Component re-posten bisreport_idda istparlis.landtag-bw.defür die Hit-Format-BestätigungSmoke-Test
Lokal (im BW-Backend ~17s pro Suche wegen Polling + Server-Latenz):
Live auf https://gwoe.toppyr.de/api/search-landtag?q=Schule&bundesland=BW:
Akzeptanzkriterien
parlamente.py::ADAPTERS["BW"]existiert und ist instanziierbarsearch(query="Schule", limit=10)liefert ≥3 echte Drucksachen mit korrektem Datum, Fraktionen, PDF-Linkget_document(drucksache)für eine reale Drucksache der laufenden WP liefert das Dokument zurückdownload_text(drucksache)extrahiert Text aus dem PDF (PyMuPDF-Standard, identisch zu MV-Adapter)Phase-1-Status (#49)
bundeslaender.py::BW.aktiv=True. Wahlprogramme der WP17 sind noch nicht indexiert (Folge-Issue #41). Aktuell läuft die Bewertung mit den föderalen Grundsatzprogrammen als Fallback — gleicher Status wie BE bis #10 fertig war.