7 # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED |
7 # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED |
8 # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
8 # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
9 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS |
9 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS |
10 # FOR A PARTICULAR PURPOSE. |
10 # FOR A PARTICULAR PURPOSE. |
11 # |
11 # |
|
12 from copy import deepcopy |
|
13 |
|
14 from jedi.evaluate.helpers import deep_ast_copy |
12 |
15 |
13 __docformat__ = 'restructuredtext' |
16 __docformat__ = 'restructuredtext' |
14 |
17 |
15 import logging |
18 import logging |
16 from datetime import datetime |
19 from datetime import datetime |
110 data_types |= set(self.selected_datatypes) |
113 data_types |= set(self.selected_datatypes) |
111 return list(data_types) |
114 return list(data_types) |
112 |
115 |
113 def get_results(self, context, sort_index=None, reverse=None, limit=None, |
116 def get_results(self, context, sort_index=None, reverse=None, limit=None, |
114 start=0, length=999, ignore_cache=False, get_count=False, request=None): |
117 start=0, length=999, ignore_cache=False, get_count=False, request=None): |
115 results = _MARKER |
118 results, count = _MARKER, 0 |
116 if not ignore_cache: |
119 if not ignore_cache: |
117 # check for cache |
120 # check for cache |
118 views_cache = get_cache(VIEWS_CACHE_REGION, VIEWS_CACHE_NAME) |
121 views_cache = get_cache(VIEWS_CACHE_REGION, VIEWS_CACHE_NAME) |
119 if self.is_using_context: |
122 if self.is_using_context: |
120 cache_key = VIEW_CONTEXT_CACHE_KEY.format(view=ICacheKeyValue(self), |
123 cache_key = VIEW_CONTEXT_CACHE_KEY.format(view=ICacheKeyValue(self), |
127 except KeyError: |
130 except KeyError: |
128 pass |
131 pass |
129 # Execute query |
132 # Execute query |
130 if results is _MARKER: |
133 if results is _MARKER: |
131 registry = get_current_registry() |
134 registry = get_current_registry() |
|
135 # Look for Elasticsearch query adapter, if available... |
132 adapter = registry.queryAdapter(self, IViewQuery, name='es') |
136 adapter = registry.queryAdapter(self, IViewQuery, name='es') |
133 if adapter is None: |
137 if adapter is None: |
134 adapter = registry.getAdapter(self, IViewQuery) |
138 adapter = registry.getAdapter(self, IViewQuery) |
135 if not sort_index: |
139 if not sort_index: |
136 sort_index = self.order_by |
140 sort_index = self.order_by |
|
141 # Get query results |
137 results, count = adapter.get_results(context, |
142 results, count = adapter.get_results(context, |
138 sort_index, |
143 sort_index, |
139 reverse if reverse is not None else self.reversed_order, |
144 reverse if reverse is not None else self.reversed_order, |
140 limit or self.limit, |
145 limit or self.limit, |
141 request=request) |
146 request=request) |
187 for name, adapter in sorted(registry.getAdapters((view,), IViewQueryParamsExtension), |
192 for name, adapter in sorted(registry.getAdapters((view,), IViewQueryParamsExtension), |
188 key=lambda x: x[1].weight): |
193 key=lambda x: x[1].weight): |
189 for new_params in adapter.get_params(context, request): |
194 for new_params in adapter.get_params(context, request): |
190 if isinstance(new_params, tuple): |
195 if isinstance(new_params, tuple): |
191 new_params, do_search = new_params |
196 new_params, do_search = new_params |
192 if new_params: |
197 if new_params is None: |
|
198 return None |
|
199 else: |
193 params &= new_params |
200 params &= new_params |
194 if not do_search: |
201 if not do_search: |
195 break |
202 break |
196 # activate search |
203 # activate search |
197 if do_search: |
204 if do_search: |
198 params &= Gt(catalog['push_end_date'], now) |
205 filters = Gt(catalog['push_end_date'], now) |
199 # check content path |
206 # check content path |
200 content_path = view.get_content_path(context) |
207 content_path = view.get_content_path(context) |
201 if content_path is not None: |
208 if content_path is not None: |
202 params &= Eq(catalog['parents'], content_path) |
209 filters &= Eq(catalog['parents'], content_path) |
203 # check content types |
210 # check content types |
204 content_types = view.get_content_types(context) |
211 content_types = view.get_content_types(context) |
205 if content_types: |
212 if content_types: |
206 params &= Any(catalog['content_type'], content_types) |
213 filters &= Any(catalog['content_type'], content_types) |
207 # check data types |
214 # check data types |
208 data_types = view.get_data_types(context) |
215 data_types = view.get_data_types(context) |
209 if data_types: |
216 if data_types: |
210 params &= Any(catalog['data_type'], data_types) |
217 filters &= Any(catalog['data_type'], data_types) |
211 return params |
218 return params |
212 |
219 |
213 def get_results(self, context, sort_index, reverse, limit, request=None): |
220 def get_results(self, context, sort_index, reverse, limit, request=None): |
214 view = self.context |
221 view = self.context |
215 catalog = get_utility(ICatalog) |
222 catalog = get_utility(ICatalog) |
216 registry = get_current_registry() |
223 registry = get_current_registry() |
217 params = self.get_params(context, request) |
224 params = self.get_params(context, request) |
218 if (not sort_index) or (sort_index == RELEVANCE_ORDER): |
225 if params is None: |
219 sort_index = None |
226 items = CatalogResultSet([]) |
220 query = CatalogQuery(catalog).query(params, |
227 total_count = 0 |
221 sort_index=sort_index, |
228 else: |
222 reverse=reverse, |
229 if (not sort_index) or (sort_index == RELEVANCE_ORDER): |
223 limit=limit) |
230 sort_index = None |
224 total_count = query[0] |
231 query = CatalogQuery(catalog).query(params, |
225 items = CatalogResultSet(query) |
232 sort_index=sort_index, |
|
233 reverse=reverse, |
|
234 limit=limit) |
|
235 total_count = query[0] |
|
236 items = CatalogResultSet(query) |
226 for name, adapter in sorted(registry.getAdapters((view,), IViewQueryFilterExtension), |
237 for name, adapter in sorted(registry.getAdapters((view,), IViewQueryFilterExtension), |
227 key=lambda x: x[1].weight): |
238 key=lambda x: x[1].weight): |
228 items = adapter.filter(context, items, request) |
239 items = adapter.filter(context, items, request) |
229 return unique_iter(items), total_count |
240 return unique_iter(items), total_count |
230 |
241 |