src/pyams_content/component/theme/__init__.py
changeset 1423 31c1bc24a308
parent 1389 1485db1e2b5e
equal deleted inserted replaced
1422:d3713e98bba0 1423:31c1bc24a308
     9 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
     9 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
    10 # FOR A PARTICULAR PURPOSE.
    10 # FOR A PARTICULAR PURPOSE.
    11 #
    11 #
    12 
    12 
    13 from persistent import Persistent
    13 from persistent import Persistent
       
    14 from pyramid.events import subscriber
    14 from zope.container.contained import Contained
    15 from zope.container.contained import Contained
       
    16 from zope.interface import alsoProvides
       
    17 from zope.lifecycleevent import IObjectAddedEvent
    15 from zope.schema.fieldproperty import FieldProperty
    18 from zope.schema.fieldproperty import FieldProperty
    16 
    19 
    17 from pyams_content.component.theme.interfaces import COLLECTIONS_INFO_KEY, \
    20 from pyams_content.component.theme.interfaces import COLLECTIONS_INFO_KEY, \
    18     COLLECTIONS_MANAGER_KEY, ICollectionsInfo, ICollectionsManager, ICollectionsManagerTarget, \
    21     COLLECTIONS_MANAGER_KEY, ICollectionsInfo, ICollectionsManager, ICollectionsManagerTarget, \
    19     ICollectionsTarget, ITagsInfo, ITagsManager, ITagsManagerTarget, ITagsTarget, IThemesInfo, \
    22     ICollectionsTarget, ITagsInfo, ITagsManager, ITagsManagerTarget, ITagsTarget, IThemesInfo, \
    20     IThemesManager, IThemesManagerTarget, IThemesTarget, TAGS_INFO_KEY, TAGS_MANAGER_KEY, \
    23     IThemesManager, IThemesManagerTarget, IThemesTarget, TAGS_INFO_KEY, TAGS_MANAGER_KEY, \
    21     THEMES_INFO_KEY, THEMES_MANAGER_KEY
    24     THEMES_INFO_KEY, THEMES_MANAGER_KEY
    22 from pyams_content.features.checker import BaseContentChecker
    25 from pyams_content.features.checker import BaseContentChecker
    23 from pyams_content.features.checker.interfaces import ERROR_VALUE, IContentChecker
    26 from pyams_content.features.checker.interfaces import ERROR_VALUE, IContentChecker
       
    27 from pyams_content.shared.site.interfaces import ISiteFolder
    24 from pyams_utils.adapter import adapter_config, get_annotation_adapter
    28 from pyams_utils.adapter import adapter_config, get_annotation_adapter
    25 from pyams_utils.factory import factory_config
    29 from pyams_utils.factory import factory_config
       
    30 from pyams_utils.inherit import BaseInheritInfo, InheritedFieldProperty
    26 
    31 
    27 
    32 
    28 __docformat__ = 'restructuredtext'
    33 __docformat__ = 'restructuredtext'
    29 
    34 
    30 from pyams_content import _
    35 from pyams_content import _
   102     return get_annotation_adapter(target, THEMES_MANAGER_KEY, IThemesManager,
   107     return get_annotation_adapter(target, THEMES_MANAGER_KEY, IThemesManager,
   103                                   name='++themes-manager++')
   108                                   name='++themes-manager++')
   104 
   109 
   105 
   110 
   106 @factory_config(IThemesInfo)
   111 @factory_config(IThemesInfo)
   107 class ThemesInfo(Persistent, Contained):
   112 class ThemesInfo(BaseInheritInfo, Persistent, Contained):
   108     """Themes info persistent class"""
   113     """Themes info persistent class"""
   109 
   114 
   110     themes = FieldProperty(IThemesInfo['themes'])
   115     adapted_interface = IThemesInfo
       
   116     target_interface = IThemesTarget
       
   117 
       
   118     _themes = FieldProperty(IThemesInfo['themes'])
       
   119     themes = InheritedFieldProperty(IThemesInfo['themes'])
   111 
   120 
   112 
   121 
   113 @adapter_config(context=IThemesTarget, provides=IThemesInfo)
   122 @adapter_config(context=IThemesTarget, provides=IThemesInfo)
   114 def themes_info_factory(target):
   123 def themes_info_factory(target):
   115     """Themes info factory"""
   124     """Themes info factory"""
   133                 field=translate(IThemesInfo['themes'].title),
   142                 field=translate(IThemesInfo['themes'].title),
   134                 message=translate(_("no defined theme"))))
   143                 message=translate(_("no defined theme"))))
   135         return output
   144         return output
   136 
   145 
   137 
   146 
       
   147 @subscriber(IObjectAddedEvent, context_selector=ISiteFolder, parent_selector=IThemesTarget)
       
   148 def handle_added_site_folder(event):
       
   149     """Handle site folder when added to a themes target"""
       
   150     alsoProvides(event.object, IThemesTarget)
       
   151 
       
   152 
   138 #
   153 #
   139 # Collections management
   154 # Collections management
   140 #
   155 #
   141 
   156 
   142 @factory_config(ICollectionsManager)
   157 @factory_config(ICollectionsManager)