src/pyams_content/component/paragraph/keynumber.py
changeset 558 d9c6b1d7fefa
parent 555 8e8a14452567
child 586 28445044f6e3
equal deleted inserted replaced
557:a78ade534b97 558:d9c6b1d7fefa
    22     IKeyNumberContainerTarget, KEYNUMBER_CONTAINER_KEY, IKeyNumberParagraph, KEYNUMBER_PARAGRAPH_TYPE, \
    22     IKeyNumberContainerTarget, KEYNUMBER_CONTAINER_KEY, IKeyNumberParagraph, KEYNUMBER_PARAGRAPH_TYPE, \
    23     KEYNUMBER_PARAGRAPH_RENDERERS
    23     KEYNUMBER_PARAGRAPH_RENDERERS
    24 from pyams_content.features.checker.interfaces import IContentChecker, MISSING_VALUE, MISSING_LANG_VALUE
    24 from pyams_content.features.checker.interfaces import IContentChecker, MISSING_VALUE, MISSING_LANG_VALUE
    25 from pyams_form.interfaces.form import IFormContextPermissionChecker
    25 from pyams_form.interfaces.form import IFormContextPermissionChecker
    26 from pyams_i18n.interfaces import II18n, II18nManager, INegotiator
    26 from pyams_i18n.interfaces import II18n, II18nManager, INegotiator
    27 from zope.annotation.interfaces import IAnnotations
       
    28 from zope.lifecycleevent.interfaces import IObjectAddedEvent, IObjectModifiedEvent, IObjectRemovedEvent
    27 from zope.lifecycleevent.interfaces import IObjectAddedEvent, IObjectModifiedEvent, IObjectRemovedEvent
    29 from zope.location.interfaces import ISublocations
    28 from zope.location.interfaces import ISublocations
    30 from zope.traversing.interfaces import ITraversable
    29 from zope.traversing.interfaces import ITraversable
    31 
    30 
    32 # import packages
    31 # import packages
    33 from pyams_catalog.utils import index_object
    32 from pyams_catalog.utils import index_object
    34 from pyams_content.component.paragraph import BaseParagraph, BaseParagraphFactory, BaseParagraphContentChecker
    33 from pyams_content.component.paragraph import BaseParagraph, BaseParagraphFactory, BaseParagraphContentChecker
    35 from pyams_content.features.checker import BaseContentChecker
    34 from pyams_content.features.checker import BaseContentChecker
    36 from pyams_content.features.renderer import RenderersVocabulary
    35 from pyams_content.features.renderer import RenderersVocabulary
    37 from pyams_utils.adapter import adapter_config, ContextAdapter
    36 from pyams_utils.adapter import adapter_config, ContextAdapter, get_annotation_adapter
    38 from pyams_utils.factory import factory_config
    37 from pyams_utils.factory import factory_config
    39 from pyams_utils.registry import get_current_registry, get_utility, utility_config
    38 from pyams_utils.registry import get_current_registry, get_utility, utility_config
    40 from pyams_utils.request import check_request
    39 from pyams_utils.request import check_request
    41 from pyams_utils.traversing import get_parent
    40 from pyams_utils.traversing import get_parent
    42 from pyams_utils.vocabulary import vocabulary_config
    41 from pyams_utils.vocabulary import vocabulary_config
   156 
   155 
   157 
   156 
   158 @adapter_config(context=IKeyNumberContainerTarget, provides=IKeyNumberContainer)
   157 @adapter_config(context=IKeyNumberContainerTarget, provides=IKeyNumberContainer)
   159 def keynumber_container_factory(target):
   158 def keynumber_container_factory(target):
   160     """Key number container factory"""
   159     """Key number container factory"""
   161     annotations = IAnnotations(target)
   160     return get_annotation_adapter(target, KEYNUMBER_CONTAINER_KEY, KeyNumberContainer, name='++keynumbers++')
   162     container = annotations.get(KEYNUMBER_CONTAINER_KEY)
       
   163     if container is None:
       
   164         container = annotations[KEYNUMBER_CONTAINER_KEY] = KeyNumberContainer()
       
   165         get_current_registry().notify(ObjectCreatedEvent(container))
       
   166         locate(container, target, '++keynumbers++')
       
   167     return container
       
   168 
   161 
   169 
   162 
   170 @adapter_config(name='keynumbers', context=IKeyNumberContainerTarget, provides=ITraversable)
   163 @adapter_config(name='keynumbers', context=IKeyNumberContainerTarget, provides=ITraversable)
   171 class KeyNumberContainerNamespace(ContextAdapter):
   164 class KeyNumberContainerNamespace(ContextAdapter):
   172     """Key numbers container ++keynumbers++ namespace"""
   165     """Key numbers container ++keynumbers++ namespace"""