#!/usr/bin/env python3 """Inject the vertical-specific into every order page. Single source of truth for slug -> vertical. Idempotent: re-running it normalizes import + placement and migrates the legacy to . Placement: immediately after the closing of the page's title block (the same spot the trucking header used), or as the first child of
/the top wrapper if no obvious anchor is found. """ import os, re, sys ORDER_DIR = os.path.join(os.path.dirname(__file__), "..", "site", "src", "pages", "order") # slug -> vertical. Anything not listed defaults to "trucking" (the original set). VERTICAL = { # ── Telecom / FCC ───────────────────────────────────────────── "bdc-broadband": "telecom", "bdc-filing": "telecom", "bdc-voice": "telecom", "calea-ssi": "telecom", "cdr-analysis": "telecom", "cores-frn-registration": "telecom", "cpni-certification": "telecom", "fcc-499a": "telecom", "fcc-499a-499q": "telecom", "fcc-499-initial": "telecom", "fcc-63-11-notification": "telecom", "fcc-compliance-checkup": "telecom", "fcc-full-compliance": "telecom", "ocn-registration": "telecom", "stir-shaken": "telecom", # ── Healthcare ──────────────────────────────────────────────── "medicare-enrollment": "healthcare", "npi-reactivation": "healthcare", "npi-revalidation": "healthcare", "nppes-update": "healthcare", "oig-sam-screening": "healthcare", "provider-compliance-bundle": "healthcare", "rmd-filing": "healthcare", # ── Corporate ───────────────────────────────────────────────── "dc-agent": "corporate", "foreign-qualification": "corporate", } IMPORT_LINE = 'import VerticalOrderHeader from "../../components/VerticalOrderHeader.astro";' LEGACY_IMPORT_RE = re.compile(r'^\s*import\s+TruckingOrderHeader\s+from\s+["\'][^"\']+["\'];\s*$', re.M) NEW_IMPORT_RE = re.compile(r'^\s*import\s+VerticalOrderHeader\s+from\s+["\'][^"\']+["\'];\s*$', re.M) def vertical_for(slug: str) -> str: return VERTICAL.get(slug, "trucking") def process(path: str) -> str: slug = os.path.basename(path)[:-len(".astro")] v = vertical_for(slug) src = open(path).read() tag = f'' # 1) Imports: ensure VerticalOrderHeader import, drop the legacy one. src = LEGACY_IMPORT_RE.sub("", src) if not NEW_IMPORT_RE.search(src): # insert after the Base import (first import line in frontmatter) m = re.search(r'^(import\s+Base\s+from[^\n]*\n)', src, re.M) if m: src = src[:m.end()] + IMPORT_LINE + "\n" + src[m.end():] else: # fallback: after frontmatter opening --- src = re.sub(r'^---\n', "---\n" + IMPORT_LINE + "\n", src, count=1) # 2) Replace any legacy header usage with the new one. src = re.sub(r'', tag, src) # 3) If the new tag isn't placed yet, insert it after the first # in the body (the title block) — matching the trucking convention. if tag not in src: m = re.search(r'\s*\n', src) if m: src = src[:m.end()] + "\n " + tag + "\n" + src[m.end():] else: # last resort: right after
or the first wrapper div m = re.search(r'(]*>\s*\n)', src) if m: src = src[:m.end()] + " " + tag + "\n" + src[m.end():] else: print(f" WARN: no anchor in {slug}, skipped placement", file=sys.stderr) # tidy: collapse 3+ blank lines created by import removal src = re.sub(r'\n{3,}', "\n\n", src) return src def main(): order = os.path.normpath(ORDER_DIR) changed = 0 counts = {} for fn in sorted(os.listdir(order)): if not fn.endswith(".astro"): continue path = os.path.join(order, fn) slug = fn[:-len(".astro")] v = vertical_for(slug) new = process(path) old = open(path).read() if new != old: open(path, "w").write(new) changed += 1 counts[v] = counts.get(v, 0) + 1 print(f"order pages processed; changed={changed}") print("vertical counts:", dict(sorted(counts.items()))) if __name__ == "__main__": main()