From e2bc067c30206fc32642147182cf13b1022c829d Mon Sep 17 00:00:00 2001 From: Marco Lents Date: Tue, 14 Apr 2026 08:08:06 +0200 Subject: [PATCH] fix party filename crash for names containing slashes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bündnis 90/Die Grünen contains a slash which was interpreted as a directory separator. Sanitize party names in filenames the same way vote topics are sanitized. Co-Authored-By: Claude Opus 4.6 (1M context) --- crawler.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/crawler.py b/crawler.py index fa760b6..8a70eee 100644 --- a/crawler.py +++ b/crawler.py @@ -333,7 +333,8 @@ def save_readme(bios, out): md += "| Partei | Abgeordnete |\n" md += "|--------|------------:|\n" for party, count in sorted(parties.items()): - md += f"| [{party}](Parteien/{party}.md) | {count} |\n" + safe_party = re.sub(r'[/<>:"|?*]', "_", party) + md += f"| [{party}](Parteien/{safe_party}.md) | {count} |\n" md += f"\n## Verzeichnisse\n\n" md += "- [Abgeordnete](Abgeordnete/) — Einzelprofile nach Nachname\n" md += "- [Abstimmungen](Abstimmungen/) — Abstimmungen nach Thema\n" @@ -357,7 +358,8 @@ def save_party_index(bios, out): if bio.job: md += f" — {bio.job}" md += "\n" - with open(f"{dir}/{party}.md", "w", encoding="utf-8") as f: + safe_party = re.sub(r'[/<>:"|?*]', "_", party) + with open(f"{dir}/{safe_party}.md", "w", encoding="utf-8") as f: f.write(md)