router.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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, token: str = None):
  14. """
  15. Render the main index page showing all builds.
  16. Args:
  17. request: FastAPI Request object
  18. token: Optional build token to automatically show log modal
  19. Returns:
  20. Rendered HTML template
  21. """
  22. return templates.TemplateResponse(
  23. "index.html",
  24. {"request": request, "token": token}
  25. )
  26. @router.get("/viewlog/{token}", response_class=HTMLResponse)
  27. async def viewlog(request: Request, token: str):
  28. """
  29. Render the index page with a specific build log open.
  30. Args:
  31. request: FastAPI Request object
  32. token: Build ID to show log for
  33. Returns:
  34. Rendered HTML template with token
  35. """
  36. return templates.TemplateResponse(
  37. "index.html",
  38. {"request": request, "token": token}
  39. )
  40. @router.get("/add_build", response_class=HTMLResponse)
  41. async def add_build(request: Request):
  42. """
  43. Render the add build page for creating new firmware builds.
  44. Args:
  45. request: FastAPI Request object
  46. Returns:
  47. Rendered HTML template
  48. """
  49. return templates.TemplateResponse(
  50. "add_build.html",
  51. {"request": request}
  52. )