src/pyams_content/component/theme/__init__.py
changeset 558 d9c6b1d7fefa
parent 501 3407e6940f6a
child 800 2b5460ecb254
equal deleted inserted replaced
557:a78ade534b97 558:d9c6b1d7fefa
    17 
    17 
    18 # import interfaces
    18 # import interfaces
    19 from pyams_content.component.theme.interfaces import IThemesManagerTarget, IThemesManager, THEMES_MANAGER_KEY, \
    19 from pyams_content.component.theme.interfaces import IThemesManagerTarget, IThemesManager, THEMES_MANAGER_KEY, \
    20     IThemesTarget, IThemesInfo, THEMES_INFO_KEY
    20     IThemesTarget, IThemesInfo, THEMES_INFO_KEY
    21 from pyams_content.features.checker.interfaces import IContentChecker, ERROR_VALUE
    21 from pyams_content.features.checker.interfaces import IContentChecker, ERROR_VALUE
    22 from zope.annotation.interfaces import IAnnotations
       
    23 
    22 
    24 # import packages
    23 # import packages
    25 from persistent import Persistent
    24 from persistent import Persistent
    26 from pyams_content.features.checker import BaseContentChecker
    25 from pyams_content.features.checker import BaseContentChecker
    27 from pyams_utils.adapter import adapter_config
    26 from pyams_utils.adapter import adapter_config, get_annotation_adapter
    28 from pyramid.threadlocal import get_current_registry
       
    29 from zope.container.contained import Contained
    27 from zope.container.contained import Contained
    30 from zope.interface import implementer
    28 from zope.interface import implementer
    31 from zope.lifecycleevent import ObjectCreatedEvent
       
    32 from zope.location import locate
       
    33 from zope.schema.fieldproperty import FieldProperty
    29 from zope.schema.fieldproperty import FieldProperty
    34 
    30 
    35 from pyams_content import _
    31 from pyams_content import _
    36 
    32 
    37 
    33 
    44 
    40 
    45 
    41 
    46 @adapter_config(context=IThemesManagerTarget, provides=IThemesManager)
    42 @adapter_config(context=IThemesManagerTarget, provides=IThemesManager)
    47 def themes_manager_factory(target):
    43 def themes_manager_factory(target):
    48     """Themes manager factory"""
    44     """Themes manager factory"""
    49     annotations = IAnnotations(target)
    45     return get_annotation_adapter(target, THEMES_MANAGER_KEY, ThemesManager, name='++themes-manager++')
    50     manager = annotations.get(THEMES_MANAGER_KEY)
       
    51     if manager is None:
       
    52         manager = annotations[THEMES_MANAGER_KEY] = ThemesManager()
       
    53         get_current_registry().notify(ObjectCreatedEvent(manager))
       
    54         locate(manager, target, '++themes-manager++')
       
    55     return manager
       
    56 
    46 
    57 
    47 
    58 @implementer(IThemesInfo)
    48 @implementer(IThemesInfo)
    59 class ThemesInfo(Persistent, Contained):
    49 class ThemesInfo(Persistent, Contained):
    60     """Themes info persistent class"""
    50     """Themes info persistent class"""
    63 
    53 
    64 
    54 
    65 @adapter_config(context=IThemesTarget, provides=IThemesInfo)
    55 @adapter_config(context=IThemesTarget, provides=IThemesInfo)
    66 def themes_info_factory(target):
    56 def themes_info_factory(target):
    67     """Themes info factory"""
    57     """Themes info factory"""
    68     annotations = IAnnotations(target)
    58     return get_annotation_adapter(target, THEMES_INFO_KEY, ThemesInfo, name='++themes++')
    69     info = annotations.get(THEMES_INFO_KEY)
       
    70     if info is None:
       
    71         info = annotations[THEMES_INFO_KEY] = ThemesInfo()
       
    72         get_current_registry().notify(ObjectCreatedEvent(info))
       
    73         locate(info, target, '++themes++')
       
    74     return info
       
    75 
    59 
    76 
    60 
    77 @adapter_config(name='themes', context=IThemesTarget, provides=IContentChecker)
    61 @adapter_config(name='themes', context=IThemesTarget, provides=IContentChecker)
    78 class ThemesContentChecker(BaseContentChecker):
    62 class ThemesContentChecker(BaseContentChecker):
    79     """Themes info content checker"""
    63     """Themes info content checker"""