Spaces:
Sleeping
Sleeping
| from fastapi import APIRouter, HTTPException | |
| from models.analysis import DocsRequest | |
| from utils.cache import docs_cache, repo_cache | |
| from utils.jobs import create_job, find_active_job, public_job, start_job | |
| from .doc_generator import generate_documentation | |
| router = APIRouter() | |
| async def generate(request: DocsRequest): | |
| try: | |
| cache_key = f"{request.repo_id}:{request.doc_type}" | |
| if cache_key in docs_cache: | |
| return docs_cache[cache_key] | |
| docs = await generate_documentation(request.repo_id, request.doc_type) | |
| docs_cache[cache_key] = docs | |
| return docs | |
| except Exception as exc: | |
| raise HTTPException(status_code=500, detail=str(exc)) from exc | |
| async def start_generate(request: DocsRequest): | |
| if request.repo_id not in repo_cache: | |
| raise HTTPException(status_code=404, detail="Repository not loaded") | |
| cache_key = f"{request.repo_id}:{request.doc_type}" | |
| if cache_key in docs_cache: | |
| return { | |
| "job_id": None, | |
| "status": "completed", | |
| "message": "Documentation already completed", | |
| "result": docs_cache[cache_key], | |
| } | |
| payload = {"doc_type": request.doc_type} | |
| existing = find_active_job("documentation", request.repo_id, payload) | |
| if existing: | |
| return public_job(existing) | |
| job = create_job("documentation", request.repo_id, payload) | |
| async def run(): | |
| docs = await generate_documentation(request.repo_id, request.doc_type) | |
| docs_cache[cache_key] = docs | |
| return docs | |
| start_job(job, run) | |
| return public_job(job) | |
| async def get_docs_job(job_id: str): | |
| from utils.cache import job_cache | |
| job = job_cache.get(job_id) | |
| if not job or job.get("kind") != "documentation": | |
| raise HTTPException(status_code=404, detail="Documentation job not found") | |
| return public_job(job) | |