src/pyams_content/shared/view/__init__.py
changeset 796 2ef3bacda742
parent 785 99772127f89b
child 856 0e8c775ca958
--- a/src/pyams_content/shared/view/__init__.py	Tue Jul 03 18:16:59 2018 +0200
+++ b/src/pyams_content/shared/view/__init__.py	Wed Jul 04 08:56:22 2018 +0200
@@ -53,6 +53,8 @@
 VIEW_CACHE_KEY = 'view_{view}'
 VIEW_CONTEXT_CACHE_KEY = 'view_{view}.context_{context}'
 
+_MARKER = object()
+
 
 @implementer(IWfView, IPreviewTarget, IReviewTarget)
 class WfView(WfSharedContent):
@@ -87,16 +89,22 @@
             content_types |= set(self.selected_content_types)
         return list(content_types)
 
-    def get_results(self, context, sort_index=None, reverse=None, limit=None):
-        views_cache = get_cache(VIEWS_CACHE_REGION, VIEWS_CACHE_NAME)
-        if self.is_using_context:
-            cache_key = VIEW_CONTEXT_CACHE_KEY.format(view=ICacheKeyValue(self),
-                                                      context=ICacheKeyValue(context))
-        else:
-            cache_key = VIEW_CACHE_KEY.format(view=ICacheKeyValue(self))
-        try:
-            results = views_cache.get_value(cache_key)
-        except KeyError:
+    def get_results(self, context, sort_index=None, reverse=None, limit=None, ignore_cache=False):
+        results = _MARKER
+        if not ignore_cache:
+            # check for cache
+            views_cache = get_cache(VIEWS_CACHE_REGION, VIEWS_CACHE_NAME)
+            if self.is_using_context:
+                cache_key = VIEW_CONTEXT_CACHE_KEY.format(view=ICacheKeyValue(self),
+                                                          context=ICacheKeyValue(context))
+            else:
+                cache_key = VIEW_CACHE_KEY.format(view=ICacheKeyValue(self))
+            try:
+                results = views_cache.get_value(cache_key)
+            except KeyError:
+                pass
+        # Execute query
+        if results is _MARKER:
             registry = get_current_registry()
             adapter = registry.queryAdapter(self, IViewQuery, name='es')
             if adapter is None:
@@ -107,8 +115,9 @@
                                           limit or self.limit)
             intids = get_utility(IIntIds)
             cache, results = tee(results)
-            views_cache.set_value(cache_key, [intids.queryId(item) for item in cache])
-            logger.debug("Storing view items to cache key {0}".format(cache_key))
+            if not ignore_cache:
+                views_cache.set_value(cache_key, [intids.queryId(item) for item in cache])
+                logger.debug("Storing view items to cache key {0}".format(cache_key))
         else:
             results = CatalogResultSet(results)
             logger.debug("Retrieving view items from cache key {0}".format(cache_key))