src/pyams_content_es/shared/view/theme.py
changeset 174 812bfc53bf5c
parent 171 2c8a4c796d1e
equal deleted inserted replaced
173:c69e460b5d73 174:812bfc53bf5c
    13 __docformat__ = 'restructuredtext'
    13 __docformat__ = 'restructuredtext'
    14 
    14 
    15 from elasticsearch_dsl import Q
    15 from elasticsearch_dsl import Q
    16 from zope.intid.interfaces import IIntIds
    16 from zope.intid.interfaces import IIntIds
    17 
    17 
    18 from pyams_content.component.theme import ICollectionsManager, ITagsManager
    18 from pyams_content.component.theme import ICollectionsManager, ITagsManager, IThemesManager, \
       
    19     IThemesManagerTarget
    19 from pyams_content.shared.view.interfaces import IViewCollectionsSettings, \
    20 from pyams_content.shared.view.interfaces import IViewCollectionsSettings, \
    20     IViewQueryEsParamsExtension, IViewTagsSettings, IViewThemesSettings, IViewUserQuery, IWfView
    21     IViewQueryEsParamsExtension, IViewTagsSettings, IViewThemesSettings, IViewUserQuery, IWfView
    21 from pyams_content_es.shared.view import EsSearchFolderQuery
    22 from pyams_content_es.shared.view import EsSearchFolderQuery
    22 from pyams_thesaurus.interfaces.thesaurus import IThesaurus
    23 from pyams_thesaurus.interfaces.thesaurus import IThesaurus
    23 from pyams_utils.adapter import ContextAdapter, adapter_config
    24 from pyams_utils.adapter import ContextAdapter, adapter_config
    25 
    26 
    26 
    27 
    27 #
    28 #
    28 # Tags query
    29 # Tags query
    29 #
    30 #
       
    31 from pyams_utils.traversing import get_parent
       
    32 
    30 
    33 
    31 @adapter_config(name='tags', context=IWfView, provides=IViewQueryEsParamsExtension)
    34 @adapter_config(name='tags', context=IWfView, provides=IViewQueryEsParamsExtension)
    32 class ViewTagsQueryEsParamsExtension(ContextAdapter):
    35 class ViewTagsQueryEsParamsExtension(ContextAdapter):
    33     """View tags query adapter """
    36     """View tags query adapter """
    34 
    37 
    47 class EsSearchFolderTagQuery(ContextAdapter):
    50 class EsSearchFolderTagQuery(ContextAdapter):
    48     """Search folder tag query for Elasticsearch"""
    51     """Search folder tag query for Elasticsearch"""
    49 
    52 
    50     @staticmethod
    53     @staticmethod
    51     def get_user_params(request):
    54     def get_user_params(request):
    52         tag = request.params.get('tag')
    55         tags = request.params.getall('tag')
    53         if tag:
    56         if tags:
    54             manager = ITagsManager(request.root, None)
    57             manager = ITagsManager(request.root, None)
    55             if manager is None:
    58             if manager is None:
    56                 raise StopIteration
    59                 raise StopIteration
    57             thesaurus = query_utility(IThesaurus, name=manager.thesaurus_name)
    60             thesaurus = query_utility(IThesaurus, name=manager.thesaurus_name)
    58             if thesaurus is None:
    61             if thesaurus is None:
    59                 raise StopIteration
    62                 raise StopIteration
    60             term = thesaurus.terms.get(tag)
    63             intids = query_utility(IIntIds)
    61             if term is not None:
    64             for tag in tags:
    62                 intids = query_utility(IIntIds)
    65                 term = thesaurus.terms.get(tag)
    63                 yield Q('term', **{'tags': intids.queryId(term)})
    66                 if term is not None:
       
    67                     yield Q('term', **{'tags': intids.queryId(term)})
    64 
    68 
    65 
    69 
    66 #
    70 #
    67 # Themes query
    71 # Themes query
    68 #
    72 #
    78         themes = settings.get_themes_index(context)
    82         themes = settings.get_themes_index(context)
    79         if themes:
    83         if themes:
    80             yield Q('terms', **{'themes.terms': themes})
    84             yield Q('terms', **{'themes.terms': themes})
    81         elif settings.select_context_themes:
    85         elif settings.select_context_themes:
    82             yield None
    86             yield None
       
    87 
       
    88 
       
    89 @adapter_config(name='themes', context=EsSearchFolderQuery, provides=IViewUserQuery)
       
    90 class EsSearchFolderThemesQuery(ContextAdapter):
       
    91     """Search folder themes query for Elasticsearch"""
       
    92 
       
    93     def get_user_params(self, request):
       
    94         themes = request.params.getall('theme')
       
    95         if themes:
       
    96             themes_target = get_parent(self.context.context, IThemesManagerTarget)
       
    97             if themes_target is None:
       
    98                 raise StopIteration
       
    99             manager = IThemesManager(themes_target, None)
       
   100             if manager is None:
       
   101                 raise StopIteration
       
   102             thesaurus = query_utility(IThesaurus, name=manager.thesaurus_name)
       
   103             if thesaurus is None:
       
   104                 raise StopIteration
       
   105             intids = query_utility(IIntIds)
       
   106             for theme in themes:
       
   107                 term = thesaurus.terms.get(theme)
       
   108                 if term is not None:
       
   109                     yield Q('term', **{'themes.terms': intids.queryId(term)})
    83 
   110 
    84 
   111 
    85 #
   112 #
    86 # Collections query
   113 # Collections query
    87 #
   114 #