Browse Source

Another iteration on utility module

rafalp 6 years ago
parent
commit
4c246418a6

+ 1 - 0
devproject/settings.py

@@ -224,6 +224,7 @@ MIDDLEWARE = [
     'django.contrib.messages.middleware.MessageMiddleware',
     'django.middleware.clickjacking.XFrameOptionsMiddleware',
 
+    'misago.cache.middleware.cache_versions_middleware',
     'misago.users.middleware.UserMiddleware',
     'misago.core.middleware.ExceptionHandlerMiddleware',
     'misago.users.middleware.OnlineTrackerMiddleware',

+ 3 - 1
misago/cache/__init__.py

@@ -1 +1,3 @@
-default_app_config = 'misago.cache.apps.MisagoCacheConfig'
+default_app_config = 'misago.cache.apps.MisagoCacheConfig'
+
+CACHE_NAME = "cache_versions"

+ 25 - 4
misago/cache/middleware.py

@@ -1,10 +1,31 @@
-from django.utils.deprecation import MiddlewareMixin
+from django.core.cache import cache
+from django.utils.functional import SimpleLazyObject
 
-from .utils import get_cache_versions
+from . import CACHE_NAME
+from .models import CacheVersion
 
 
 def cache_versions_middleware(get_response):
-    """Sets request.cache_versions attribute with dict cache versions."""
+    """Sets request.cache_versions attribute with dict of cache versions."""
     def middleware(request):
-        request.cache_versions = get_cache_versions()
+        request.cache_versions = SimpleLazyObject(get_cache_versions)
         return get_response(request)
+
+    return middleware
+
+
+def get_cache_versions():
+    cache_versions = get_cache_versions_from_cache()
+    if cache_versions is None:
+        cache_versions = get_cache_versions_from_db()
+        cache.set(CACHE_NAME, cache_versions)
+    return cache_versions
+
+
+def get_cache_versions_from_cache():
+    return cache.get(CACHE_NAME)
+
+
+def get_cache_versions_from_db():
+    queryset = CacheVersion.objects.all()
+    return {i.cache: i.version for i in queryset}

+ 1 - 1
misago/cache/migrations/0001_initial.py

@@ -18,7 +18,7 @@ class Migration(migrations.Migration):
             name='CacheVersion',
             fields=[
                 ('cache', models.CharField(max_length=128, primary_key=True, serialize=False)),
-                ('version', models.CharField(default=misago.cache.utils.get_random_version, max_length=8)),
+                ('version', models.CharField(default=misago.cache.utils.generate_version_string, max_length=8)),
             ],
         ),
     ]

+ 2 - 2
misago/cache/models.py

@@ -1,8 +1,8 @@
 from django.db import models
 
-from .utils import get_random_version
+from .utils import generate_version_string
 
 
 class CacheVersion(models.Model):
     cache = models.CharField(max_length=128, primary_key=True)
-    version = models.CharField(max_length=8, default=get_random_version)
+    version = models.CharField(max_length=8, default=generate_version_string)

+ 1 - 1
misago/cache/utils.py

@@ -1,5 +1,5 @@
 from django.utils.crypto import get_random_string
 
 
-def get_random_version():
+def generate_version_string():
     return get_random_string(8)