src/pyams_content/component/gallery/__init__.py
changeset 555 8e8a14452567
parent 501 3407e6940f6a
child 950 12ad545bc649
--- a/src/pyams_content/component/gallery/__init__.py	Thu May 24 10:51:45 2018 +0200
+++ b/src/pyams_content/component/gallery/__init__.py	Fri May 25 08:03:41 2018 +0200
@@ -23,7 +23,6 @@
 from pyams_content.shared.common.interfaces import IWfSharedContent
 from pyams_form.interfaces.form import IFormContextPermissionChecker
 from pyams_i18n.interfaces import II18n
-from zope.annotation.interfaces import IAnnotations
 from zope.lifecycleevent.interfaces import IObjectAddedEvent, IObjectModifiedEvent, IObjectRemovedEvent
 from zope.location.interfaces import ISublocations
 from zope.traversing.interfaces import ITraversable
@@ -31,10 +30,10 @@
 # import packages
 from pyams_catalog.utils import index_object
 from pyams_content.features.checker import BaseContentChecker
-from pyams_content.features.renderer import RenderedContentMixin, IContentRenderer
-from pyams_utils.adapter import adapter_config, ContextAdapter
+from pyams_content.features.renderer import RenderedContentMixin, RenderersVocabulary
+from pyams_utils.adapter import adapter_config, ContextAdapter, get_annotation_adapter
+from pyams_utils.factory import factory_config
 from pyams_utils.container import BTreeOrderedContainer
-from pyams_utils.request import check_request
 from pyams_utils.traversing import get_parent
 from pyams_utils.vocabulary import vocabulary_config
 from pyramid.events import subscriber
@@ -43,7 +42,6 @@
 from zope.lifecycleevent import ObjectCreatedEvent, ObjectModifiedEvent
 from zope.location import locate
 from zope.schema.fieldproperty import FieldProperty
-from zope.schema.vocabulary import SimpleVocabulary, SimpleTerm
 
 from pyams_content import _
 
@@ -53,7 +51,8 @@
 #
 
 @implementer(IGallery)
-class Gallery(BTreeOrderedContainer, RenderedContentMixin):
+@factory_config(provided=IBaseGallery)
+class Gallery(RenderedContentMixin, BTreeOrderedContainer):
     """Gallery persistent class"""
 
     title = FieldProperty(IGallery['title'])
@@ -80,13 +79,7 @@
 @adapter_config(context=IGalleryTarget, provides=IGallery)
 def gallery_factory(target):
     """Galleries container factory"""
-    annotations = IAnnotations(target)
-    gallery = annotations.get(GALLERY_CONTAINER_KEY)
-    if gallery is None:
-        gallery = annotations[GALLERY_CONTAINER_KEY] = Gallery()
-        get_current_registry().notify(ObjectCreatedEvent(gallery))
-        locate(gallery, target, '++gallery++')
-    return gallery
+    return get_annotation_adapter(target, GALLERY_CONTAINER_KEY, Gallery, name='++gallery++')
 
 
 @adapter_config(name='gallery', context=IGalleryTarget, provides=ITraversable)
@@ -183,16 +176,7 @@
 
 
 @vocabulary_config(name=GALLERY_RENDERERS)
-class GalleryRendererVocabulary(SimpleVocabulary):
+class GalleryRendererVocabulary(RenderersVocabulary):
     """Gallery renderers vocabulary"""
 
-    def __init__(self, context=None):
-        request = check_request()
-        translate = request.localizer.translate
-        registry = request.registry
-        if not IBaseGallery.providedBy(context):
-            context = Gallery()
-        terms = [SimpleTerm(name, title=translate(adapter.label))
-                 for name, adapter in sorted(registry.getAdapters((context, request), IContentRenderer),
-                                             key=lambda x: x[1].weight)]
-        super(GalleryRendererVocabulary, self).__init__(terms)
+    content_interface = IBaseGallery