website/website/contrib/singleton_page/utils.py
Jake Howard c2150b66f3
Reduce cache times
This means content will be updated faster after changes
2023-06-26 13:26:28 +01:00

32 lines
803 B
Python

from typing import Type
from django.core.cache import cache
from django.http.request import HttpRequest
from wagtail.models import Page
class SingletonPageCache:
@classmethod
def get_url_cache_key(cls, model: Type[Page]) -> str:
return f"singleton_url_{model.__name__}"
@classmethod
def get_url(
cls, model: Type[Page], request: HttpRequest | None = None
) -> str | None:
cache_key = cls.get_url_cache_key(model)
url = cache.get(cache_key)
if url is None:
# `.first` is marginally more efficient than `.get`
page = Page.objects.type(model).first()
if page is None:
return None
url = page.get_url(request)
cache.set(cache_key, url, 10800)
return url