alfaz-browser / modules /term_workspace.py
abedelbahnasy55's picture
Initial deploy: Flask + Gradio wrapper + assets
51d43b8 verified
Raw
History Blame Contribute Delete
3.64 kB
import os
import json
import logging
from pathlib import Path
from datetime import datetime
from config import THESIS_DIR
class TermWorkspace:
"""Manage all files for a single term study."""
def __init__(self, term: str, category: str):
self.term = term
self.category = category
self.safe = term.replace(" ", "_")
category_name = category # "tadeel" or "jarh" used directly in path
self.base = THESIS_DIR / "01_terms" / category_name / self.safe
self.raw_dir = self.base / "raw"
self.ai_dir = self.base / "ai-output"
self.processed_dir = self.base / "processed"
self.docx_dir = self.base / "docx"
self.logs_dir = self.base / "logs"
self._dirs_created = False
def _ensure_dirs(self):
if self._dirs_created:
return
for d in [
self.raw_dir,
self.ai_dir,
self.processed_dir,
self.docx_dir,
self.logs_dir,
]:
d.mkdir(parents=True, exist_ok=True)
self._dirs_created = True
def save_raw_search(self, draft: dict):
self._ensure_dirs()
path = self.raw_dir / "search_results.json"
path.write_text(
json.dumps(draft, ensure_ascii=False, indent=2), encoding="utf-8"
)
return path
def save_raw_draft_md(self, md_text: str):
self._ensure_dirs()
path = self.raw_dir / "draft.md"
path.write_text(md_text, encoding="utf-8")
return path
def save_research_before_ai(self, content: str):
self._ensure_dirs()
path = self.raw_dir / "research-before-ai.md"
path.write_text(content, encoding="utf-8")
return path
def save_prompt(self, prompt_text: str, section_name: str = "full"):
self._ensure_dirs()
path = self.raw_dir / f"prompt-{section_name}.md"
path.write_text(prompt_text, encoding="utf-8")
return path
def save_ai_section(self, section_num: int, section_name: str, content: str):
self._ensure_dirs()
path = self.ai_dir / f"section_{section_num:02d}_{section_name}.md"
path.write_text(content, encoding="utf-8")
return path
def save_ai_full(self, content: str):
self._ensure_dirs()
path = self.ai_dir / "full_raw.md"
path.write_text(content, encoding="utf-8")
return path
def save_processed(self, content: str, filename: str = "study.md"):
self._ensure_dirs()
path = self.processed_dir / filename
path.write_text(content, encoding="utf-8")
return path
def save_docx(self, content: bytes, filename: str = None):
self._ensure_dirs()
if filename is None:
filename = f"{self.safe}.docx"
path = self.docx_dir / filename
path.write_bytes(content)
return path
def get_log_path(self, log_type: str = "general") -> Path:
return self.logs_dir / f"{log_type}.log"
def save_meta(self, meta: dict):
self._ensure_dirs()
path = self.base / "meta.json"
existing = {}
if path.exists():
existing = json.loads(path.read_text(encoding="utf-8"))
existing.update(meta)
existing["last_updated"] = datetime.now().isoformat()
path.write_text(
json.dumps(existing, ensure_ascii=False, indent=2), encoding="utf-8"
)
return path
def load_meta(self) -> dict:
path = self.base / "meta.json"
if path.exists():
return json.loads(path.read_text(encoding="utf-8"))
return {}