"""Shared context for branded HTML/text emails (public site palette).""" from __future__ import annotations import html import re from django.conf import settings from django.contrib.staticfiles.storage import staticfiles_storage _URL_RE = re.compile(r"(https?://[^\s<]+)") def email_brand_context(**extra): site_url = (getattr(settings, "PUBLIC_SITE_URL", None) or "").rstrip("/") if not site_url: site_url = "https://mkdrealtor.com" logo_path = staticfiles_storage.url("brand/exit_logo.png") if logo_path.startswith("http://") or logo_path.startswith("https://"): logo_url = logo_path else: logo_url = f"{site_url}{logo_path}" brand_name = getattr(settings, "SITE_NAME", None) or "Monica Dhillon" brand_legal = getattr(settings, "CREDIT_NAME", None) or brand_name tagline = getattr(settings, "SITE_TAGLINE", None) or "" host_label = site_url.replace("https://", "").replace("http://", "") return { "site_url": site_url, "logo_url": logo_url, "brand_name": brand_name, "brand_legal": brand_legal, "brand_tagline": tagline, "host_label": host_label, **extra, } def plain_text_to_email_html(text: str) -> str: """Escape plain text and turn paragraphs / URLs into simple HTML.""" raw = (text or "").replace("\r\n", "\n").strip() if not raw: return "" blocks: list[str] = [] for para in re.split(r"\n\s*\n", raw): lines = [html.escape(line) for line in para.split("\n")] joined = "
\n".join(lines) joined = _URL_RE.sub( r'\1', joined, ) blocks.append( f'

{joined}

' ) return "\n".join(blocks)