|
@@ -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}
|