mirror of
https://github.com/markbeep/AudioBookRequest.git
synced 2026-01-06 05:30:14 -06:00
76 lines
2.6 KiB
Python
76 lines
2.6 KiB
Python
from typing import Any, Mapping, overload
|
|
|
|
from fastapi import Request, Response
|
|
from jinja2_fragments.fastapi import Jinja2Blocks
|
|
from starlette.background import BackgroundTask
|
|
|
|
from app.internal.auth.authentication import DetailedUser
|
|
from app.internal.env_settings import Settings
|
|
|
|
templates = Jinja2Blocks(directory="templates")
|
|
templates.env.filters["zfill"] = lambda val, num: str(val).zfill(num) # pyright: ignore[reportUnknownLambdaType,reportUnknownMemberType,reportUnknownArgumentType]
|
|
templates.env.filters["toJSstring"] = lambda val: f"'{str(val).replace("'", "\\'")}'" # pyright: ignore[reportUnknownLambdaType,reportUnknownMemberType,reportUnknownArgumentType]
|
|
templates.env.globals["vars"] = vars # pyright: ignore[reportUnknownMemberType]
|
|
templates.env.globals["getattr"] = getattr # pyright: ignore[reportUnknownMemberType]
|
|
templates.env.globals["version"] = Settings().app.version # pyright: ignore[reportUnknownMemberType]
|
|
templates.env.globals["json_regexp"] = ( # pyright: ignore[reportUnknownMemberType]
|
|
r'^\{\s*(?:"[^"\\]*(?:\\.[^"\\]*)*"\s*:\s*"[^"\\]*(?:\\.[^"\\]*)*"\s*(?:,\s*"[^"\\]*(?:\\.[^"\\]*)*"\s*:\s*"[^"\\]*(?:\\.[^"\\]*)*"\s*)*)?\}$'
|
|
)
|
|
templates.env.globals["base_url"] = Settings().app.base_url.rstrip("/") # pyright: ignore[reportUnknownMemberType]
|
|
|
|
|
|
@overload
|
|
def template_response(
|
|
name: str,
|
|
request: Request,
|
|
user: DetailedUser,
|
|
context: dict[str, Any],
|
|
status_code: int = 200,
|
|
headers: Mapping[str, str] | None = None,
|
|
media_type: str | None = None,
|
|
background: BackgroundTask | None = None,
|
|
*,
|
|
block_names: list[str] = [],
|
|
) -> Response: ...
|
|
|
|
|
|
@overload
|
|
def template_response(
|
|
name: str,
|
|
request: Request,
|
|
user: DetailedUser,
|
|
context: dict[str, Any],
|
|
status_code: int = 200,
|
|
headers: Mapping[str, str] | None = None,
|
|
media_type: str | None = None,
|
|
background: BackgroundTask | None = None,
|
|
*,
|
|
block_name: str | None = None,
|
|
) -> Response: ...
|
|
|
|
|
|
def template_response(
|
|
name: str,
|
|
request: Request,
|
|
user: DetailedUser,
|
|
context: dict[str, Any],
|
|
status_code: int = 200,
|
|
headers: Mapping[str, str] | None = None,
|
|
media_type: str | None = None,
|
|
background: BackgroundTask | None = None,
|
|
**kwargs: Any,
|
|
) -> Response:
|
|
"""Template response wrapper to make sure required arguments are passed everywhere"""
|
|
copy = context.copy()
|
|
copy.update({"request": request, "user": user})
|
|
|
|
return templates.TemplateResponse(
|
|
name=name,
|
|
context=copy,
|
|
status_code=status_code,
|
|
headers=headers,
|
|
media_type=media_type,
|
|
background=background,
|
|
**kwargs,
|
|
)
|