Browse Source

Add more features to misago.cache

rafalp 6 years ago
parent
commit
50f918ec96

+ 1 - 3
misago/cache/__init__.py

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

+ 0 - 0
misago/cache/management/__init__.py


+ 0 - 0
misago/cache/management/commands/__init__.py


+ 11 - 0
misago/cache/management/commands/invalidateversionedcaches.py

@@ -0,0 +1,11 @@
+from django.core.management.base import BaseCommand
+
+from misago.cache.versions import invalidate_all
+
+
+class Command(BaseCommand):
+    help = 'Invalidates versioned caches'
+
+    def handle(self, *args, **options):
+        invalidate_all()
+        self.stdout.write("Invalidated versioned caches.")

+ 1 - 20
misago/cache/middleware.py

@@ -1,8 +1,6 @@
-from django.core.cache import cache
 from django.utils.functional import SimpleLazyObject
 
-from . import CACHE_NAME
-from .models import CacheVersion
+from .versions import get_cache_versions
 
 
 def cache_versions_middleware(get_response):
@@ -12,20 +10,3 @@ def cache_versions_middleware(get_response):
         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}

+ 0 - 0
misago/cache/tests/__init__.py


+ 38 - 0
misago/cache/versions.py

@@ -0,0 +1,38 @@
+from django.core.cache import cache
+
+from .models import CacheVersion
+from .utils import generate_version_string
+
+CACHE_NAME = "cache_versions"
+
+
+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}
+
+
+def invalidate(cache):
+    CacheVersion.objects.filter(cache=cache).update(
+        version=generate_version_string(),
+    )
+    cache.delete(CACHE_NAME)
+
+
+def invalidate_all():
+    for cache in get_cache_versions_from_db().keys():
+        CacheVersion.objects.filter(cache=cache).update(
+            version=generate_version_string(),
+        )
+    cache.delete(CACHE_NAME)