website-builder-backend / backend /generator /project_generator.py
David Prince
production: clean source snapshot — no history bloat
71b4454
Raw
History Blame Contribute Delete
1.24 kB
from __future__ import annotations
import json
import logging
from pathlib import Path
from typing import Any
logger = logging.getLogger("generator.project")
ROOT = Path(__file__).resolve().parents[2]
GENERATED_ROOT = ROOT / "generated_projects"
class ProjectGenerator:
async def generate_from_template(
self,
project_id: str,
template: str,
) -> dict[str, Any]:
if not project_id or not project_id.strip():
raise ValueError("project_id is required")
if not template or not template.strip():
raise ValueError("template is required")
project_root = GENERATED_ROOT / project_id
project_root.mkdir(parents=True, exist_ok=True)
metadata = {
"project_id": project_id,
"template": template,
"project_root": str(project_root),
"status": "generated",
}
(project_root / "project.json").write_text(
json.dumps(metadata, indent=2),
encoding="utf-8",
)
logger.info(
"Generated project %s from template %s",
project_id,
template,
)
return metadata
project_generator = ProjectGenerator()