src/pyams_content/shared/view/__init__.py
changeset 1217 ac40004d7c73
parent 1168 3b177d6db9db
child 1223 99a4c33e2962
equal deleted inserted replaced
1216:30602138e7f7 1217:ac40004d7c73
     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