router.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. """
  2. Web UI routes for serving HTML templates.
  3. """
  4. from fastapi import APIRouter, Request
  5. from fastapi.responses import HTMLResponse
  6. from fastapi.templating import Jinja2Templates
  7. from pathlib import Path
  8. router = APIRouter(tags=["web"])
  9. # Setup templates directory
  10. WEB_ROOT = Path(__file__).resolve().parent.parent
  11. templates = Jinja2Templates(directory=str(WEB_ROOT / "templates"))
  12. @router.get("/", response_class=HTMLResponse)
  13. async def index(request: Request, build_id: str = None):
  14. """
  15. Render the main index page showing all builds.
  16. Args:
  17. request: FastAPI Request object
  18. build_id: Optional build ID to automatically show log modal and
  19. trigger artifact download on build completion
  20. Returns:
  21. Rendered HTML template
  22. """
  23. return templates.TemplateResponse(
  24. "index.html",
  25. {"request": request, "build_id": build_id}
  26. )
  27. @router.get("/add_build", response_class=HTMLResponse)
  28. async def add_build(request: Request, rebuild_from: str = None):
  29. """
  30. Render the add build page for creating new firmware builds.
  31. Args:
  32. request: FastAPI Request object
  33. rebuild_from: Optional build ID to copy configuration from
  34. Returns:
  35. Rendered HTML template
  36. """
  37. return templates.TemplateResponse(
  38. "add_build.html",
  39. {"request": request, "rebuild_from": rebuild_from}
  40. )