Source code for htmx_nav.helpers
from collections.abc import Callable
from typing import TypeVar
from django.http import HttpRequest
T = TypeVar("T")
_MISSING = object()
[docs]
def cache_on_request(request: HttpRequest, key: str, builder: Callable[[], T]) -> T:
"""Caches and returns a computed value on the Django request object.
Args:
request: The Django HTTP request.
key: The attribute name to store the cached value under.
builder: A callable that generates the value if not already cached.
Returns:
The cached or newly computed value.
"""
cached = getattr(request, key, _MISSING)
if cached is not _MISSING:
return cached # type: ignore[return-value]
value = builder()
setattr(request, key, value)
return value