42 lines
1.3 KiB
Python
42 lines
1.3 KiB
Python
"""Configuração do Jinja2 e helpers de renderização/flash."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
|
|
from fastapi.templating import Jinja2Templates
|
|
from starlette.requests import Request
|
|
from starlette.responses import HTMLResponse
|
|
|
|
from . import auth
|
|
from .config import get_settings
|
|
from .storage import money
|
|
|
|
TEMPLATES_DIR = Path(__file__).resolve().parent / "templates"
|
|
|
|
templates = Jinja2Templates(directory=str(TEMPLATES_DIR))
|
|
templates.env.filters["money"] = money
|
|
|
|
|
|
def flash(request: Request, message: str, level: str = "info") -> None:
|
|
bucket = request.session.setdefault("_flash", [])
|
|
bucket.append({"message": message, "level": level})
|
|
|
|
|
|
def pop_flash(request: Request) -> list[dict[str, str]]:
|
|
return request.session.pop("_flash", [])
|
|
|
|
|
|
def render(request: Request, name: str, status_code: int = 200, **context) -> HTMLResponse:
|
|
settings = get_settings()
|
|
base = {
|
|
"request": request,
|
|
"current_user": auth.current_user(request),
|
|
"csrf_token": auth.get_csrf_token(request),
|
|
"flashes": pop_flash(request),
|
|
"openai_enabled": settings.openai_enabled,
|
|
"app_name": "Lernotafiscal",
|
|
}
|
|
base.update(context)
|
|
return templates.TemplateResponse(request, name, base, status_code=status_code)
|