# routes/upload.py from fastapi import APIRouter, Request, UploadFile, File, HTTPException from fastapi.responses import HTMLResponse from pathlib import Path import api_client import config router = APIRouter() def _render(request: Request, template: str, **kwargs) -> HTMLResponse: """Render using JinjaX catalog for all .jinja templates""" catalog = request.app.state.catalog html_content = catalog.render(template, **kwargs) return HTMLResponse(content=html_content) @router.get("/", response_class=HTMLResponse) async def index(request: Request): return _render(request, "index") @router.get("/health-check", response_class=HTMLResponse) async def health_check(request: Request): try: data = await api_client.check_health() return _render( request, "partials/health_status", ok=True, entwine_available=data.get("entwine_available", False), disk_free_gb=data.get("disk_free_gb", "?"), ) except Exception as e: return _render(request, "partials/health_status", ok=False, error=str(e)) @router.post("/upload", response_class=HTMLResponse) async def upload(request: Request, file: UploadFile = File(...)): suffix = Path(file.filename).suffix.lower() if suffix not in config.SUPPORTED_EXTENSIONS: return _render( request, "partials/upload_result", error=f"Format non supporté : {suffix}. " f"Formats acceptés : {', '.join(config.SUPPORTED_EXTENSIONS)}", result=None, ) try: data = await api_client.upload_file(file.filename, await file.read()) return _render(request, "partials/upload_result", result=data, error=None) except Exception as e: return _render(request, "partials/upload_result", error=str(e), result=None)