from dataclasses import dataclass, field from pydantic import BaseModel from fansifter_common.adapters.sendgrid.constants import MERGE_TAG_DEFAULTS class Error(BaseModel): message: str field: str | None = None help: str | None = None class ErrorResponse(BaseModel): errors: list[Error] id: int | None = None @dataclass(kw_only=True, slots=True) class Email: email: str name: str | None = None def get(self) -> dict[str, str]: ret = {"email": self.email} if self.name: ret["name"] = self.name return ret @dataclass(kw_only=True, slots=True) class MergeTags: first_name: str | None = None def to_substitutions(self) -> dict[str, str]: return { "-firstName-": self.first_name or MERGE_TAG_DEFAULTS["first_name"], } @dataclass(kw_only=True, slots=True) class FanData: email: str profile_token: str | None = None country_iso2: str privacy_links_block: str legal_entity_name: str legal_entity_address: str opt_in_info: str unsubscribe_text: str opt_in_info_external: str double_opt_in_url: str | None = None profile_text: str | None = None merge_tags: MergeTags = field(default_factory=MergeTags) def __post_init__(self) -> None: self.country_iso2 = self.country_iso2.lower() def apply_fallback_merge_tags(html: str) -> str: for token, value in MergeTags().to_substitutions().items(): html = html.replace(token, value) return html