meeting_memory/raw_store.py

53 lines
1.3 KiB
Python

import logging
import os
from datetime import datetime
from config import config
logger = logging.getLogger(__name__)
def _sanitize_filename(name: str) -> str:
if not name:
return "untitled"
invalid = '<>:"/\\|?*'
for char in invalid:
name = name.replace(char, "")
name = name.replace(" ", "_").strip("._")
return name or "untitled"
class RawMeetingStore:
def __init__(self):
self.raw_dir = config.storage.raw_dir
os.makedirs(self.raw_dir, exist_ok=True)
def save(self, text: str, title: str = "", date: str = "") -> str:
date_str = date or datetime.now().strftime("%Y-%m-%d")
safe_title = _sanitize_filename(title)[:60]
filename = f"{date_str}_{safe_title}.md"
filepath = os.path.join(self.raw_dir, filename)
content = "\n".join(
[
"---",
f'title: "{title}"',
f'date: "{date_str}"',
"status: archived",
"---",
"",
f"# {title or 'Untitled Meeting'}",
"",
text,
"",
]
)
with open(filepath, "w", encoding="utf-8") as f:
f.write(content)
logger.info("Saved raw meeting text: %s", filepath)
return filepath
raw_meeting_store = RawMeetingStore()