37 lines
1.2 KiB
Python
37 lines
1.2 KiB
Python
"""
|
|
Helper pour injecter automatiquement current_user dans le contexte Jinja2.
|
|
"""
|
|
from fastapi import Request
|
|
from fastapi.templating import Jinja2Templates
|
|
from starlette.responses import HTMLResponse, Response
|
|
|
|
|
|
def render(templates: Jinja2Templates, template_name: str,
|
|
request: Request, context: dict = None,
|
|
status_code: int = 200) -> HTMLResponse:
|
|
ctx = context or {}
|
|
ctx["request"] = request
|
|
if "current_user" not in ctx:
|
|
ctx["current_user"] = getattr(request.state, "current_user", None)
|
|
# Compatible avec toutes les versions de Starlette/FastAPI
|
|
response = templates.TemplateResponse(template_name, ctx)
|
|
response.status_code = status_code
|
|
return response
|
|
|
|
def render_xml(templates: Jinja2Templates, template_name: str,
|
|
request: Request, invoice: "Invoice",
|
|
filename: str = "factur-x.xml") -> Response:
|
|
|
|
xml_content = templates.env.get_template(template_name).render(
|
|
request=request,
|
|
invoice=invoice,
|
|
seller=invoice.seller,
|
|
buyer=invoice.buyer,
|
|
)
|
|
|
|
return Response(
|
|
content=xml_content,
|
|
media_type="application/xml",
|
|
headers={"Content-Disposition": f'attachment; filename="{filename}"'}
|
|
)
|