--- 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)