"""Pagine HTML servite direttamente da ml.mebboat.it. Layout: / redirect a /datasets (o landing console) /datasets lista/upload dataset /models registro modelli /train avvia training /test esegue test su modello trainato /results storico e confronto risultati """ from __future__ import annotations from pathlib import Path from fastapi import APIRouter, Depends, Request from fastapi.responses import HTMLResponse, RedirectResponse from fastapi.templating import Jinja2Templates from core.auth import _verify from core.config import settings router = APIRouter(tags=["pages"]) TEMPLATES_DIR = Path(__file__).resolve().parent.parent / "templates" templates = Jinja2Templates(directory=str(TEMPLATES_DIR)) def _user_or_redirect(request: Request): """Per le pagine, se non autenticato redirect al login. Ritorna user dict o RedirectResponse.""" token = request.cookies.get("auth_token") auth = request.headers.get("authorization") if not token and auth and auth.startswith("Bearer "): token = auth[7:] user = _verify(token) if not user: target = str(request.url) return RedirectResponse(url=f"{settings.auth_login_url}?redirect={target}", status_code=302) return user def _render(request: Request, template: str, **ctx): user = _user_or_redirect(request) if isinstance(user, RedirectResponse): return user return templates.TemplateResponse(template, {"request": request, "user": user, **ctx}) @router.get("/", response_class=HTMLResponse) async def home(request: Request): return RedirectResponse(url="/datasets") @router.get("/datasets", response_class=HTMLResponse) async def page_datasets(request: Request): return _render(request, "datasets.html", page="datasets") @router.get("/models", response_class=HTMLResponse) async def page_models(request: Request): return _render(request, "models.html", page="models") @router.get("/train", response_class=HTMLResponse) async def page_train(request: Request): return _render(request, "train.html", page="train") @router.get("/test", response_class=HTMLResponse) async def page_test(request: Request): return _render(request, "test.html", page="test") @router.get("/results", response_class=HTMLResponse) async def page_results(request: Request): return _render(request, "results.html", page="results")