src/pyams_content/shared/view/__init__.py
changeset 1443 2af30495d1d7
parent 1281 327666db65f9
--- a/src/pyams_content/shared/view/__init__.py	Tue Dec 01 09:19:16 2020 +0100
+++ b/src/pyams_content/shared/view/__init__.py	Mon Jan 11 16:45:22 2021 +0100
@@ -111,8 +111,9 @@
         return list(data_types)
 
     def get_results(self, context, sort_index=None, reverse=None, limit=None,
-                    start=0, length=999, ignore_cache=False, get_count=False, request=None):
-        results, count = _MARKER, 0
+                    start=0, length=999, ignore_cache=False, get_count=False, request=None,
+                    aggregates=None):
+        results, count, aggregations = _MARKER, 0, {}
         if not ignore_cache:
             # check for cache
             views_cache = get_cache(VIEWS_CACHE_REGION, VIEWS_CACHE_NAME)
@@ -124,6 +125,7 @@
             try:
                 results = views_cache.get_value(cache_key)
                 count = views_cache.get_value(cache_key + '::count')
+                aggregations = views_cache.get_value(cache_key + '::aggregations')
             except KeyError:
                 pass
         # Execute query
@@ -136,22 +138,25 @@
             if not sort_index:
                 sort_index = self.order_by
             # Get query results
-            results, count = adapter.get_results(context,
-                                                 sort_index,
-                                                 reverse if reverse is not None else self.reversed_order,
-                                                 limit or self.limit,
-                                                 request=request)
+            results, count, aggregations = adapter.get_results(context,
+                                                               sort_index,
+                                                               reverse if reverse is not None
+                                                                   else self.reversed_order,
+                                                               limit or self.limit,
+                                                               request=request,
+                                                               aggregates=aggregates)
             count = min(count, limit or self.limit or 999)
             cache, results = tee(islice(results, start, start + length))
             if not ignore_cache:
                 intids = get_utility(IIntIds)
                 views_cache.set_value(cache_key, [intids.queryId(item) for item in cache])
                 views_cache.set_value(cache_key + '::count', count)
+                views_cache.set_value(cache_key + '::aggregations', aggregations)
                 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))
-        return (results, count) if get_count else results
+        return (results, count, aggregations) if get_count else results
 
 
 register_content_type(WfView, shared_content=False)
@@ -215,7 +220,8 @@
                 filters &= Any(catalog['data_type'], data_types)
         return params
 
-    def get_results(self, context, sort_index, reverse, limit, request=None):
+    def get_results(self, context, sort_index, reverse, limit,
+                    request=None, aggregates=None):
         view = self.context
         catalog = get_utility(ICatalog)
         registry = get_current_registry()
@@ -235,7 +241,7 @@
         for name, adapter in sorted(registry.getAdapters((view,), IViewQueryFilterExtension),
                                     key=lambda x: x[1].weight):
             items = adapter.filter(context, items, request)
-        return unique_iter(items), total_count
+        return unique_iter(items), total_count, {}
 
 
 @subscriber(IObjectModifiedEvent, context_selector=IWfView)