50 lines
1.7 KiB
Python
50 lines
1.7 KiB
Python
from dataclasses import dataclass, field
|
|
|
|
from app.services.mime_body_extractor import ExtractedMimePart, MirroredMimeContent, extract_mirror_content
|
|
from app.services.raw_mime_storage import get_raw_mime_storage
|
|
|
|
|
|
@dataclass
|
|
class HandoffMirrorPayload:
|
|
body_text: str
|
|
body_html: str | None
|
|
inline_parts: list[ExtractedMimePart] = field(default_factory=list)
|
|
file_attachments: list[ExtractedMimePart] = field(default_factory=list)
|
|
|
|
|
|
async def load_mirror_payload(external_message: dict) -> HandoffMirrorPayload:
|
|
body_text = (external_message.get("body_text") or external_message.get("snippet") or "").strip()
|
|
body_html = external_message.get("body_html")
|
|
inline_parts: list[ExtractedMimePart] = []
|
|
file_attachments: list[ExtractedMimePart] = []
|
|
|
|
if external_message.get("raw_mime"):
|
|
try:
|
|
raw = await get_raw_mime_storage().get(external_message["raw_mime"])
|
|
extracted: MirroredMimeContent = extract_mirror_content(raw)
|
|
if extracted.body_text:
|
|
body_text = extracted.body_text
|
|
if extracted.body_html:
|
|
body_html = extracted.body_html
|
|
inline_parts = extracted.inline_parts
|
|
file_attachments = extracted.file_attachments
|
|
except Exception:
|
|
pass
|
|
|
|
if not body_text:
|
|
body_text = external_message.get("snippet") or "(No message body)"
|
|
|
|
return HandoffMirrorPayload(
|
|
body_text=body_text,
|
|
body_html=body_html,
|
|
inline_parts=inline_parts,
|
|
file_attachments=file_attachments,
|
|
)
|
|
|
|
|
|
async def load_mirror_update_payload(
|
|
external_message: dict,
|
|
*,
|
|
agent_email: str,
|
|
) -> HandoffMirrorPayload:
|
|
return await load_mirror_payload(external_message)
|