diff --git a/mail/maler.py b/mail/maler.py index f4a66b6..503d72e 100644 --- a/mail/maler.py +++ b/mail/maler.py @@ -536,14 +536,32 @@ def mot_binær(sti: Path) -> None: data = sti.read_bytes() finnes = {m.group(1).decode() for m in re.finditer(rb"email/([a-z0-9_]+)(?=[A-Z{])", data)} - # Partialene har ingen egen tekst; de innebygde malene bruker dem, våre ikke. - finnes -= {"email_header", "email_footer", "email_footer_text"} - mangler = finnes - set(MALER) + mangler = _mangler(finnes) if mangler: raise SystemExit("maler.py: serveren har maler vi ikke har skrevet: " + ", ".join(sorted(mangler))) +# Partialene har ingen egen tekst; de innebygde malene bruker dem, våre ikke. +PARTIALER = {"email_header", "email_footer", "email_footer_text"} + + +def _mangler(finnes: set[str]) -> set[str]: + """Hvilke av serverens maler vi ikke har skrevet. + + Navnene plukkes ut av en binærfil, så treffene inneholder avkuttede biter - + «sm» der det står smtp_test, «we» der det står welcome. Et navn som bare er + starten på et annet navn er et slikt fragment, ikke en mal. + + Prisen er at en oppstrøms mal som heter nøyaktig starten på en vi allerede + har, ville sluppet gjennom. Det har ikke skjedd, og alternativet - å la + fragmentene stoppe hvert eneste bygg - er verre.""" + kjente = finnes | set(MALER) + ekte = {n for n in finnes - PARTIALER + if not any(k != n and k.startswith(n) for k in kjente)} + return ekte - set(MALER) + + def skriv(ut: Path) -> int: n = 0 for navn, per_språk in MALER.items():