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), |