From 4c593337fc0d6b563fafa4d5b93642d6f90b6437 Mon Sep 17 00:00:00 2001 From: Jonathan Weth <git@jonathanweth.de> Date: Mon, 7 Sep 2020 14:19:25 +0200 Subject: [PATCH] Cache some often used methods using memoize (custom menus, school term, favicon) --- aleksis/core/models.py | 5 ++++- aleksis/core/util/core_helpers.py | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/aleksis/core/models.py b/aleksis/core/models.py index 00a2faacd..2231fb360 100644 --- a/aleksis/core/models.py +++ b/aleksis/core/models.py @@ -19,6 +19,7 @@ from django.utils.text import slugify from django.utils.translation import gettext_lazy as _ import jsonstore +from cache_memoize import cache_memoize from dynamic_preferences.models import PerInstancePreferenceModel from phonenumber_field.modelfields import PhoneNumberField from polymorphic.models import PolymorphicModel @@ -64,6 +65,7 @@ class SchoolTerm(ExtensibleModel): date_end = models.DateField(verbose_name=_("End date")) @classmethod + @cache_memoize(3600) def get_current(cls, day: Optional[date] = None): if not day: day = timezone.now().date() @@ -688,9 +690,10 @@ class CustomMenu(ExtensibleModel): return self.name if self.name != "" else self.id @classmethod + @cache_memoize(3600) def get_default(cls, name): """Get a menu by name or create if it does not exist.""" - menu, _ = cls.objects.get_or_create(name=name) + menu, _ = cls.objects.prefetch_related("items").get_or_create(name=name) return menu class Meta: diff --git a/aleksis/core/util/core_helpers.py b/aleksis/core/util/core_helpers.py index 8e424174c..94380e00d 100644 --- a/aleksis/core/util/core_helpers.py +++ b/aleksis/core/util/core_helpers.py @@ -135,6 +135,7 @@ def lazy_get_favicon_url( ) -> Callable[[str, str], Any]: """Lazily get the URL to a favicon image.""" + @cache_memoize(3600) def _get_favicon_url(size: int, rel: str) -> Any: from favicon.models import Favicon # noqa -- GitLab