""" 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}"'} )