src/pyams_skin/configuration.py
changeset 328 277aea3b91ec
parent 294 ca2b091ad80d
child 347 fbdccca7bad5
--- a/src/pyams_skin/configuration.py	Fri May 25 16:14:59 2018 +0200
+++ b/src/pyams_skin/configuration.py	Mon May 28 14:06:21 2018 +0200
@@ -21,22 +21,19 @@
     IBackOfficeConfiguration, SKIN_BACK_CONFIGURATION_KEY
 from pyams_utils.interfaces.site import IConfigurationManager, IConfigurationFactory, IBackOfficeConfigurationFactory
 from pyams_utils.interfaces.tales import ITALESExtension
-from zope.annotation.interfaces import IAnnotations
 from zope.traversing.interfaces import ITraversable
 
 # import packages
 from persistent import Persistent
 from pyams_file.property import FileProperty
 from pyams_file.views.file import FileView
-from pyams_utils.adapter import ContextRequestViewAdapter, ContextAdapter, adapter_config
-from pyams_utils.request import check_request
+from pyams_utils.adapter import ContextRequestViewAdapter, ContextAdapter, adapter_config, get_annotation_adapter
+from pyams_utils.registry import get_global_registry
 from pyams_utils.traversing import get_parent
 from pyramid.httpexceptions import HTTPNotFound
-from pyramid.threadlocal import get_current_registry
 from pyramid.view import view_config
 from zope.container.contained import Contained
 from zope.interface import implementer, Interface
-from zope.location.location import locate
 from zope.schema.fieldproperty import FieldProperty
 
 
@@ -58,7 +55,7 @@
 
     @staticmethod
     def get_title_prefix(request):
-        adapter = get_current_registry().queryMultiAdapter((request.context, request), IContextTitlePrefix)
+        adapter = get_global_registry().queryMultiAdapter((request.context, request), IContextTitlePrefix)
         if adapter is not None:
             return adapter.prefix
 
@@ -66,14 +63,13 @@
 @adapter_config(context=IConfigurationManager, provides=IConfiguration)
 def configuration_factory(context):
     """Configuration factory"""
-    annotations = IAnnotations(context)
-    configuration = annotations.get(SKIN_CONFIGURATION_KEY)
-    if configuration is None:
-        registry = check_request().registry
-        factory = registry.queryAdapter(context, IConfigurationFactory, default=Configuration)
-        configuration = annotations[SKIN_CONFIGURATION_KEY] = factory()
-        locate(configuration, context, '++configuration++')
-    return configuration
+
+    def get_configuration_factory():
+        registry = get_global_registry()
+        return registry.queryAdapter(context, IConfigurationFactory, default=Configuration)
+
+    return get_annotation_adapter(context, SKIN_CONFIGURATION_KEY, factory=lambda: get_configuration_factory(),
+                                  name='++configuration++')
 
 
 @adapter_config(name='configuration', context=(Interface, Interface, Interface), provides=ITALESExtension)
@@ -126,7 +122,7 @@
 
     @staticmethod
     def get_title_prefix(request):
-        adapter = get_current_registry().queryMultiAdapter((request.context, request), IContextTitlePrefix)
+        adapter = request.registry.queryMultiAdapter((request.context, request), IContextTitlePrefix)
         if adapter is not None:
             return adapter.prefix
 
@@ -134,14 +130,13 @@
 @adapter_config(context=IConfigurationManager, provides=IBackOfficeConfiguration)
 def back_office_configuration_factory(context):
     """Back-office configuration factory"""
-    annotations = IAnnotations(context)
-    configuration = annotations.get(SKIN_BACK_CONFIGURATION_KEY)
-    if configuration is None:
-        registry = check_request().registry
-        factory = registry.queryAdapter(context, IBackOfficeConfigurationFactory, default=BackOfficeConfiguration)
-        configuration = annotations[SKIN_BACK_CONFIGURATION_KEY] = factory()
-        locate(configuration, context, '++back-configuration++')
-    return configuration
+
+    def get_configuration_factory():
+        registry = get_global_registry()
+        return registry.queryAdapter(context, IBackOfficeConfigurationFactory, default=BackOfficeConfiguration)
+
+    return get_annotation_adapter(context, SKIN_BACK_CONFIGURATION_KEY, factory=lambda: get_configuration_factory(),
+                                  name='++back-configuration++')
 
 
 @adapter_config(name='back_configuration', context=(Interface, Interface, Interface), provides=ITALESExtension)