from typing import Any, NewType from pydantic import BaseModel, Field, TypeAdapter ProfileToken = NewType("ProfileToken", str) class FansifterProfileIdentifier(BaseModel): profile_id: str = Field(alias="profileId") origin_id: str | None = Field(default=None, alias="originId") origin_type: str | None = Field(default=None, alias="originType") automated_email_trigger_id: str | None = Field( default=None, alias="automatedEmailTriggerId" ) email_campaign_id: str | int | None = Field( default=None, alias="emailCampaignId", deprecated=True ) impersonated_by: str | None = Field(default=None, alias="impersonatedBy") def model_post_init(self, __context: Any) -> None: if isinstance(self.email_campaign_id, str) and self.origin_id is None: self.origin_id = self.email_campaign_id self.origin_type = "EMAIL_CAMPAIGN" if self.origin_type != "AUTOMATED_EMAIL": self.automated_email_trigger_id = None def __str__(self) -> str: return f"fansifter:{self.profile_id}" class CRMProfileIdentifier(BaseModel): crm_id: str = Field(alias="crmId") origin_id: str | None = Field(default=None, alias="originId") origin_type: str | None = Field(default=None, alias="originType") automated_email_trigger_id: str | None = Field( default=None, alias="automatedEmailTriggerId" ) email_campaign_id: str | int | None = Field( default=None, alias="emailCampaignId", deprecated=True ) impersonated_by: str | None = Field(default=None, alias="impersonatedBy") def model_post_init(self, __context: Any) -> None: if isinstance(self.email_campaign_id, str) and self.origin_id is None: self.origin_id = self.email_campaign_id self.origin_type = "EMAIL_CAMPAIGN" if self.origin_type != "AUTOMATED_EMAIL": self.automated_email_trigger_id = None def __str__(self) -> str: return f"crm:{self.crm_id}" ProfileIdentifier = FansifterProfileIdentifier | CRMProfileIdentifier ProfileIdentifierValidator: TypeAdapter[ProfileIdentifier] = TypeAdapter( ProfileIdentifier ) DoubleOptInToken = NewType("DoubleOptInToken", str) class DoubleOptInIdentifier(BaseModel): event_row_id: str = Field(alias="eventRowId") email_id: str = Field(alias="emailId") automated_email_trigger_id: str = Field(alias="automatedEmailTriggerId") iat: float