Spaces:
Build error
Build error
| 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() | |