src/pyams_content/shared/view/__init__.py
changeset 115 67a6a3b92612
parent 96 120f7842a8cb
child 267 9d42d0a6e945
equal deleted inserted replaced
114:7799437055f1 115:67a6a3b92612
    15 
    15 
    16 # import standard library
    16 # import standard library
    17 import logging
    17 import logging
    18 logger = logging.getLogger("PyAMS (content)")
    18 logger = logging.getLogger("PyAMS (content)")
    19 
    19 
       
    20 from datetime import datetime
       
    21 
    20 # import interfaces
    22 # import interfaces
    21 from hypatia.interfaces import ICatalog
    23 from hypatia.interfaces import ICatalog
    22 from pyams_content.shared.view.interfaces import IView, IWfView, IViewQuery, IViewQueryParamsExtension, \
    24 from pyams_content.shared.view.interfaces import IView, IWfView, IViewQuery, IViewQueryParamsExtension, \
    23     IViewQueryFilterExtension, VIEW_CONTENT_TYPE, VIEW_CONTENT_NAME
    25     IViewQueryFilterExtension, VIEW_CONTENT_TYPE, VIEW_CONTENT_NAME
    24 from zope.intid.interfaces import IIntIds
    26 from zope.intid.interfaces import IIntIds
    25 from zope.lifecycleevent.interfaces import IObjectModifiedEvent
    27 from zope.lifecycleevent.interfaces import IObjectModifiedEvent
    26 
    28 
    27 # import packages
    29 # import packages
    28 from hypatia.catalog import CatalogQuery
    30 from hypatia.catalog import CatalogQuery
    29 from hypatia.query import Any
    31 from hypatia.query import Any, Gt, Lt
    30 from pyams_cache.beaker import get_cache
    32 from pyams_cache.beaker import get_cache
    31 from pyams_catalog.query import CatalogResultSet, or_
    33 from pyams_catalog.query import CatalogResultSet, or_
    32 from pyams_content.shared.common import WfSharedContent, register_content_type, SharedContent
    34 from pyams_content.shared.common import WfSharedContent, register_content_type, SharedContent
    33 from pyams_utils.adapter import adapter_config, ContextAdapter
    35 from pyams_utils.adapter import adapter_config, ContextAdapter
    34 from pyams_utils.list import unique
    36 from pyams_utils.list import unique
    35 from pyams_utils.registry import get_utility
    37 from pyams_utils.registry import get_utility
       
    38 from pyams_utils.timezone import tztime
    36 from pyams_workflow.interfaces import IWorkflow
    39 from pyams_workflow.interfaces import IWorkflow
    37 from pyramid.events import subscriber
    40 from pyramid.events import subscriber
    38 from pyramid.threadlocal import get_current_registry
    41 from pyramid.threadlocal import get_current_registry
    39 from zope.interface import implementer
    42 from zope.interface import implementer
    40 from zope.schema.fieldproperty import FieldProperty
    43 from zope.schema.fieldproperty import FieldProperty
    89 
    92 
    90 @adapter_config(context=IWfView, provides=IViewQuery)
    93 @adapter_config(context=IWfView, provides=IViewQuery)
    91 class ViewQuery(ContextAdapter):
    94 class ViewQuery(ContextAdapter):
    92     """View query"""
    95     """View query"""
    93 
    96 
    94     def get_es_params(self, context):
    97     def get_params(self, context):
    95         view = self.context
    98         view = self.context
    96         catalog = get_utility(ICatalog)
    99         catalog = get_utility(ICatalog)
    97         registry = get_current_registry()
   100         registry = get_current_registry()
    98         params = Any(catalog['content_type'], view.selected_content_types)
   101         params = Any(catalog['content_type'], view.selected_content_types)
    99         wf_params = None
   102         wf_params = None
   100         for workflow in registry.getAllUtilitiesRegisteredFor(IWorkflow):
   103         for workflow in registry.getAllUtilitiesRegisteredFor(IWorkflow):
   101             wf_params = or_(wf_params, Any(catalog['workflow_state'], workflow.published_states))
   104             wf_params = or_(wf_params, Any(catalog['workflow_state'], workflow.published_states))
   102         params &= wf_params
   105         params &= wf_params
       
   106         now = tztime(datetime.utcnow())
       
   107         params &= Lt(catalog['effective_date'], now)
       
   108         params &= Gt(catalog['push_end_date'], now)
   103         for name, adapter in sorted(registry.getAdapters((view,), IViewQueryParamsExtension),
   109         for name, adapter in sorted(registry.getAdapters((view,), IViewQueryParamsExtension),
   104                                     key=lambda x: x[1].weight):
   110                                     key=lambda x: x[1].weight):
   105             new_params = adapter.get_params(context)
   111             new_params = adapter.get_params(context)
   106             if new_params:
   112             if new_params:
   107                 params &= new_params
   113                 params &= new_params
   109 
   115 
   110     def get_results(self, context, limit=None):
   116     def get_results(self, context, limit=None):
   111         view = self.context
   117         view = self.context
   112         catalog = get_utility(ICatalog)
   118         catalog = get_utility(ICatalog)
   113         registry = get_current_registry()
   119         registry = get_current_registry()
   114         params = self.get_es_params(context)
   120         params = self.get_params(context)
   115         items = CatalogResultSet(CatalogQuery(catalog).query(params,
   121         items = CatalogResultSet(CatalogQuery(catalog).query(params,
   116                                                              sort_index=view.order_by,
   122                                                              sort_index=view.order_by,
   117                                                              reverse=view.reversed_order,
   123                                                              reverse=view.reversed_order,
   118                                                              limit=limit))
   124                                                              limit=limit))
   119         for name, adapter in sorted(registry.getAdapters((view,), IViewQueryFilterExtension),
   125         for name, adapter in sorted(registry.getAdapters((view,), IViewQueryFilterExtension),