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""" |