src/pyams_content/shared/view/__init__.py
changeset 796 2ef3bacda742
parent 785 99772127f89b
child 856 0e8c775ca958
equal deleted inserted replaced
795:d282eb691486 796:2ef3bacda742
    51 VIEWS_CACHE_NAME = 'PyAMS::view'
    51 VIEWS_CACHE_NAME = 'PyAMS::view'
    52 
    52 
    53 VIEW_CACHE_KEY = 'view_{view}'
    53 VIEW_CACHE_KEY = 'view_{view}'
    54 VIEW_CONTEXT_CACHE_KEY = 'view_{view}.context_{context}'
    54 VIEW_CONTEXT_CACHE_KEY = 'view_{view}.context_{context}'
    55 
    55 
       
    56 _MARKER = object()
       
    57 
    56 
    58 
    57 @implementer(IWfView, IPreviewTarget, IReviewTarget)
    59 @implementer(IWfView, IPreviewTarget, IReviewTarget)
    58 class WfView(WfSharedContent):
    60 class WfView(WfSharedContent):
    59     """Base view"""
    61     """Base view"""
    60 
    62 
    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