"""BMW Group ePaaS (Enterprise Privacy as a Service). URL: /epaas/prod/policypage///.epaas.json Schema: policyPageMetadata + categories + providers """ import re MATCHER = re.compile(r"/epaas/prod/policypage/.+\.epaas\.json(\?|$)", re.I) _TAG_RE = re.compile(r"<[^>]+>") _WS_RE = re.compile(r"\s+") def _clean(text: str) -> str: no_tags = _TAG_RE.sub(" ", text) no_tags = (no_tags .replace(" ", " ").replace("&", "&") .replace("<", "<").replace(">", ">") .replace(""", '"').replace("'", "'")) return _WS_RE.sub(" ", no_tags).strip() def reconstruct(d: dict) -> str: meta = d.get("policyPageMetadata", {}) or {} parts: list[str] = ["# Cookie-Richtlinie"] for key in ("heading", "subHeading", "prologue", "dataController", "epilogue"): val = meta.get(key) if val: parts.append("") parts.append(_clean(str(val))) cats = d.get("categories", []) or [] if cats: parts.append("") parts.append("## Cookie-Kategorien") for c in cats: name = c.get("name") or c.get("id") or "" desc = c.get("description") or c.get("descriptionHtml") or "" parts.append("") parts.append(f"### {name}") parts.append(_clean(str(desc))) providers = d.get("providers", []) or [] if providers: parts.append("") parts.append(f"## Anbieter ({len(providers)})") for p in providers: name = p.get("name") or p.get("id") or "" purpose = (p.get("purpose") or "").strip() country = (p.get("country") or "").strip() persistence = (p.get("persistencePurposeDescription") or "").strip() line = f"- {name}" if purpose: line += f" — Zweck: {purpose}" if country: line += f" — Sitz: {country}" if persistence: line += f" — Speicherdauer: {persistence[:120]}" parts.append(line) if meta.get("expiresAfter"): parts.append("") parts.append(f"Speicherdauer: {meta['expiresAfter']}") if meta.get("persistencePurposeText"): parts.append(_clean(str(meta["persistencePurposeText"]))) return "\n".join(parts)