AgentAZAll / src /agentazall /messages.py
cronos3k's picture
Upload folder using huggingface_hub
c75bbd7 verified
"""AgentAZAll message format — compose & parse plain-text messages."""
from pathlib import Path
from typing import Optional, Tuple
from .helpers import generate_id, now_str
def format_message(from_a, to_a, subject, body, msg_id=None, attachments=None) -> Tuple[str, str]:
"""Build a plain-text message string. Returns (content, msg_id)."""
if not msg_id:
msg_id = generate_id(from_a, to_a, subject)
lines = [
f"From: {from_a}",
f"To: {to_a}",
f"Subject: {subject}",
f"Date: {now_str()}",
f"Message-ID: {msg_id}",
"Status: new",
]
if attachments:
lines.append(f"Attachments: {', '.join(Path(a).name for a in attachments)}")
lines += ["", "---", body]
return "\n".join(lines), msg_id
def parse_message(path) -> Tuple[Optional[dict], Optional[str]]:
"""Parse a message file into (headers_dict, body_text)."""
p = Path(path)
if not p.exists():
return None, None
text = p.read_text(encoding="utf-8", errors="replace")
headers: dict = {}
body_lines: list = []
in_body = False
for line in text.split("\n"):
if not in_body:
if line.strip() == "---":
in_body = True
continue
if ":" in line:
k, _, v = line.partition(":")
headers[k.strip()] = v.strip()
else:
body_lines.append(line)
return headers, "\n".join(body_lines)
def parse_headers_only(path) -> dict:
"""Parse only message headers (faster — stops at '---')."""
headers = {}
with open(path, "r", encoding="utf-8", errors="replace") as f:
for line in f:
line = line.rstrip("\n")
if line.strip() == "---":
break
if ":" in line:
k, _, v = line.partition(":")
headers[k.strip()] = v.strip()
return headers