from dataclasses import dataclass, field from dataclasses_json import config, dataclass_json from typing import List, Optional, Dict from external_api.base.clients.client import ApiClient from external_api.utils import remove_none_values def exclude_if_none(value): return value is None @dataclass_json @dataclass class EmailContextSchema: artist_image_link: str artist_name: str media_plan_link: str project_name: str message: Optional[str] = field(default=None, metadata=config(exclude=exclude_if_none)) requester_email: Optional[str] = field(default=None, metadata=config(exclude=exclude_if_none)) review_link: Optional[str] = field(default=None, metadata=config(exclude=exclude_if_none)) approval_count: Optional[int] = field(default=None, metadata=config(exclude=exclude_if_none)) approved_campaigns_count: Optional[int] = field(default=None, metadata=config(exclude=exclude_if_none)) disapproved_campaigns_count: Optional[int] = field(default=None, metadata=config(exclude=exclude_if_none)) reviewer_fullname: Optional[str] = field(default=None, metadata=config(exclude=exclude_if_none)) requester_fullname: Optional[str] = field(default=None, metadata=config(exclude=exclude_if_none)) reviewer_name: Optional[str] = field(default=None, metadata=config(exclude=exclude_if_none)) requester_name: Optional[str] = field(default=None, metadata=config(exclude=exclude_if_none)) label_name: Optional[str] = field(default=None, metadata=config(exclude=exclude_if_none)) @dataclass_json @dataclass class EmailTemplateSchema: id: int context: EmailContextSchema @dataclass class SendEmailAttachmentSchema: base64_data: str filename: str filetype: str @dataclass class SendEmailSchema: to: List[str] subject: Optional[str] = None body: Optional[str] = None template: Optional[EmailTemplateSchema] = None cc: Optional[List[str]] = None attachments: Optional[List[SendEmailAttachmentSchema]] = None track_clicks: Optional[bool] = None class NotificationsClient: http_client: ApiClient def __init__(self, client: ApiClient): self.http_client = client async def send_email(self, params: List[SendEmailSchema]) -> List[Dict[str, str]]: endpoint = "/email/send" payload = [remove_none_values({ "body": email.body, "template": email.template.to_dict(), "subject": email.subject, "to": email.to, "cc": email.cc, "attachments": email.attachments, "track_clicks": email.track_clicks }) for email in params] return await self.http_client.post(endpoint, payload=payload)