src/pyams_content/features/search/manager.py
changeset 1389 1485db1e2b5e
parent 1269 08b31decc8d7
equal deleted inserted replaced
1388:8c757af2fc50 1389:1485db1e2b5e
    14 
    14 
    15 from persistent import Persistent
    15 from persistent import Persistent
    16 from zope.container.contained import Contained
    16 from zope.container.contained import Contained
    17 from zope.schema.fieldproperty import FieldProperty
    17 from zope.schema.fieldproperty import FieldProperty
    18 
    18 
    19 from pyams_content.component.links import InternalReferenceMixin
       
    20 from pyams_content.features.search.interfaces import ISearchManagerInfo
    19 from pyams_content.features.search.interfaces import ISearchManagerInfo
    21 from pyams_content.root import ISiteRoot
    20 from pyams_content.root import ISiteRoot
       
    21 from pyams_sequence.reference import get_reference_target
    22 from pyams_utils.adapter import adapter_config, get_annotation_adapter
    22 from pyams_utils.adapter import adapter_config, get_annotation_adapter
    23 from pyams_utils.factory import factory_config
    23 from pyams_utils.factory import factory_config
       
    24 from pyams_utils.zodb import volatile_property
       
    25 
    24 
    26 
    25 SEARCH_MANAGER_INFO_KEY = 'pyams_content.search'
    27 SEARCH_MANAGER_INFO_KEY = 'pyams_content.search'
    26 
    28 
    27 
    29 
    28 @factory_config(ISearchManagerInfo)
    30 @factory_config(ISearchManagerInfo)
    29 class SearchManagerInfo(Persistent, Contained, InternalReferenceMixin):
    31 class SearchManagerInfo(Persistent, Contained):
    30     """Search manager persistent info"""
    32     """Search manager persistent info"""
    31 
    33 
       
    34     _reference = FieldProperty(ISearchManagerInfo['reference'])
    32     name = FieldProperty(ISearchManagerInfo['name'])
    35     name = FieldProperty(ISearchManagerInfo['name'])
    33     description = FieldProperty(ISearchManagerInfo['description'])
    36     description = FieldProperty(ISearchManagerInfo['description'])
       
    37 
       
    38     enable_tags_search = FieldProperty(ISearchManagerInfo['enable_tags_search'])
       
    39     _tags_search_target = FieldProperty(ISearchManagerInfo['tags_search_target'])
       
    40 
       
    41     enable_collections_search = FieldProperty(ISearchManagerInfo['enable_collections_search'])
       
    42     _collections_search_target = FieldProperty(ISearchManagerInfo['collections_search_target'])
       
    43 
       
    44     # main search target
       
    45 
       
    46     @property
       
    47     def reference(self):
       
    48         return self._reference
       
    49 
       
    50     @reference.setter
       
    51     def reference(self, value):
       
    52         self._reference = value
       
    53         del self.search_target
       
    54 
       
    55     @volatile_property
       
    56     def search_target(self):
       
    57         return get_reference_target(self._reference)
       
    58 
       
    59     # tags search target
       
    60 
       
    61     @property
       
    62     def tags_search_target(self):
       
    63         return self._tags_search_target
       
    64 
       
    65     @tags_search_target.setter
       
    66     def tags_search_target(self, value):
       
    67         self._tags_search_target = value
       
    68         del self.tags_target
       
    69 
       
    70     @volatile_property
       
    71     def tags_target(self):
       
    72         if self.enable_tags_search:
       
    73             return get_reference_target(self._tags_search_target)
       
    74         return None
       
    75 
       
    76     # collections search target
       
    77 
       
    78     @property
       
    79     def collections_search_target(self):
       
    80         return self._collections_search_target
       
    81 
       
    82     @collections_search_target.setter
       
    83     def collections_search_target(self, value):
       
    84         self._collections_search_target = value
       
    85         del self.collections_target
       
    86 
       
    87     @volatile_property
       
    88     def collections_target(self):
       
    89         if self.enable_collections_search:
       
    90             return get_reference_target(self._collections_search_target)
       
    91         return None
       
    92 
       
    93     @property
       
    94     def references(self):
       
    95         return list(filter(lambda x: x is not None, [self.reference,
       
    96                                                      self.tags_search_target,
       
    97                                                      self.collections_search_target]))
       
    98 
       
    99     def get_targets(self, state=None):
       
   100         for reference in [self.reference, self.tags_search_target, self.collections_search_target]:
       
   101             if reference is not None:
       
   102                 yield get_reference_target(reference, state)
    34 
   103 
    35 
   104 
    36 @adapter_config(context=ISiteRoot, provides=ISearchManagerInfo)
   105 @adapter_config(context=ISiteRoot, provides=ISearchManagerInfo)
    37 def site_root_search_manager_adapter(context):
   106 def site_root_search_manager_adapter(context):
    38     """Site root search manager adapter"""
   107     """Site root search manager adapter"""