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