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