38 lines
1.0 KiB
Python
38 lines
1.0 KiB
Python
from fastapi import Request
|
|
from fastapi.templating import Jinja2Templates
|
|
from jinja2 import pass_context
|
|
from typing import Any
|
|
from starlette.datastructures import URL
|
|
|
|
from session import SessionStorage, SessionManager
|
|
from config import CONFIGS
|
|
|
|
__TEMPLATES = Jinja2Templates(directory='templates')
|
|
|
|
|
|
@pass_context
|
|
def url_for(context: dict[str, Any], name: str = '', **path_params: dict[str, Any]) -> URL:
|
|
'''
|
|
Custom url_for function for Jinja2 to add a prefix to the generated URL.
|
|
'''
|
|
request: Request = context["request"]
|
|
url = request.url_for(name, **path_params)
|
|
prefixed_path = f"{CONFIGS.ROOT_PATH.rstrip('/')}/{url.path.lstrip('/')}"
|
|
|
|
return url.replace(path=prefixed_path)
|
|
|
|
|
|
__TEMPLATES.env.globals['url_for'] = url_for # type: ignore
|
|
|
|
|
|
def get_templates() -> Jinja2Templates:
|
|
return __TEMPLATES
|
|
|
|
|
|
__SESSION_STORAGE = SessionStorage()
|
|
__SESSION_MANAGER = SessionManager(__SESSION_STORAGE, CONFIGS.EXPIRATION_MINUTES)
|
|
|
|
|
|
def get_session_manager() -> SessionManager:
|
|
return __SESSION_MANAGER
|