85 content_types.add(context.content_type) |
87 content_types.add(context.content_type) |
86 if self.selected_content_types: |
88 if self.selected_content_types: |
87 content_types |= set(self.selected_content_types) |
89 content_types |= set(self.selected_content_types) |
88 return list(content_types) |
90 return list(content_types) |
89 |
91 |
90 def get_results(self, context, sort_index=None, reverse=None, limit=None): |
92 def get_results(self, context, sort_index=None, reverse=None, limit=None, ignore_cache=False): |
91 views_cache = get_cache(VIEWS_CACHE_REGION, VIEWS_CACHE_NAME) |
93 results = _MARKER |
92 if self.is_using_context: |
94 if not ignore_cache: |
93 cache_key = VIEW_CONTEXT_CACHE_KEY.format(view=ICacheKeyValue(self), |
95 # check for cache |
94 context=ICacheKeyValue(context)) |
96 views_cache = get_cache(VIEWS_CACHE_REGION, VIEWS_CACHE_NAME) |
95 else: |
97 if self.is_using_context: |
96 cache_key = VIEW_CACHE_KEY.format(view=ICacheKeyValue(self)) |
98 cache_key = VIEW_CONTEXT_CACHE_KEY.format(view=ICacheKeyValue(self), |
97 try: |
99 context=ICacheKeyValue(context)) |
98 results = views_cache.get_value(cache_key) |
100 else: |
99 except KeyError: |
101 cache_key = VIEW_CACHE_KEY.format(view=ICacheKeyValue(self)) |
|
102 try: |
|
103 results = views_cache.get_value(cache_key) |
|
104 except KeyError: |
|
105 pass |
|
106 # Execute query |
|
107 if results is _MARKER: |
100 registry = get_current_registry() |
108 registry = get_current_registry() |
101 adapter = registry.queryAdapter(self, IViewQuery, name='es') |
109 adapter = registry.queryAdapter(self, IViewQuery, name='es') |
102 if adapter is None: |
110 if adapter is None: |
103 adapter = registry.getAdapter(self, IViewQuery) |
111 adapter = registry.getAdapter(self, IViewQuery) |
104 results = adapter.get_results(context, |
112 results = adapter.get_results(context, |
105 sort_index or self.order_by, |
113 sort_index or self.order_by, |
106 reverse if reverse is not None else self.reversed_order, |
114 reverse if reverse is not None else self.reversed_order, |
107 limit or self.limit) |
115 limit or self.limit) |
108 intids = get_utility(IIntIds) |
116 intids = get_utility(IIntIds) |
109 cache, results = tee(results) |
117 cache, results = tee(results) |
110 views_cache.set_value(cache_key, [intids.queryId(item) for item in cache]) |
118 if not ignore_cache: |
111 logger.debug("Storing view items to cache key {0}".format(cache_key)) |
119 views_cache.set_value(cache_key, [intids.queryId(item) for item in cache]) |
|
120 logger.debug("Storing view items to cache key {0}".format(cache_key)) |
112 else: |
121 else: |
113 results = CatalogResultSet(results) |
122 results = CatalogResultSet(results) |
114 logger.debug("Retrieving view items from cache key {0}".format(cache_key)) |
123 logger.debug("Retrieving view items from cache key {0}".format(cache_key)) |
115 return results |
124 return results |
116 |
125 |