import datetime import urllib.parse from dataclasses import dataclass from typing import NamedTuple from fansifter_common.adapters.sendgrid.models import Email from fansifter_common.core.enums import Brand from pydantic import BaseModel, Field, field_validator class S3Bucket(BaseModel): name: str class S3Object(BaseModel): key: str size: int @field_validator("key") # noqa @classmethod def unquote_key(cls, v: str) -> str: return urllib.parse.unquote_plus(v) class S3Data(BaseModel): bucket: S3Bucket object: S3Object class S3Record(BaseModel): event_time: datetime.datetime = Field(alias="eventTime") s3: S3Data class S3Event(BaseModel): records: list[S3Record] = Field(alias="Records", min_length=1) class EmailSend(NamedTuple): automated_email_id: str automated_email_trigger_id: str brand: Brand vendor_id: int vendor_name: str subject: str html_content: str preview_text: str | None from_email: Email category: str confirmation_id: str | None @dataclass(slots=True, frozen=True) class CsvRow: row_id: int automated_email_id: str automated_email_trigger_id: str timestamp: str is_doi_send: bool confirmation_id: str | None fan_profile_id: str | None fan_email: str fan_first_name: str fan_last_name: str fan_country_code: str