54 lines
No EOL
1.8 KiB
Python
54 lines
No EOL
1.8 KiB
Python
# 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) |