[Checkins] SVN: Products.GenericSetup/branches/gotcha-registries-use-utilities/Products/GenericSetup/ store global steps as ustilities in component registry

Godefroid Chapelle gotcha at bubblenet.be
Thu Mar 3 09:26:59 EST 2011


Log message for revision 120738:
  store global steps as ustilities in component registry

Changed:
  U   Products.GenericSetup/branches/gotcha-registries-use-utilities/Products/GenericSetup/interfaces.py
  U   Products.GenericSetup/branches/gotcha-registries-use-utilities/Products/GenericSetup/registry.py
  U   Products.GenericSetup/branches/gotcha-registries-use-utilities/Products/GenericSetup/tests/test_stepzcml.py
  U   Products.GenericSetup/branches/gotcha-registries-use-utilities/Products/GenericSetup/tests/test_zcml.py
  U   Products.GenericSetup/branches/gotcha-registries-use-utilities/Products/GenericSetup/zcml.py

-=-
Modified: Products.GenericSetup/branches/gotcha-registries-use-utilities/Products/GenericSetup/interfaces.py
===================================================================
--- Products.GenericSetup/branches/gotcha-registries-use-utilities/Products/GenericSetup/interfaces.py	2011-03-03 14:25:53 UTC (rev 120737)
+++ Products.GenericSetup/branches/gotcha-registries-use-utilities/Products/GenericSetup/interfaces.py	2011-03-03 14:26:58 UTC (rev 120738)
@@ -11,8 +11,6 @@
 #
 ##############################################################################
 """ GenericSetup product interfaces
-
-$Id$
 """
 
 from zope.interface import Attribute
@@ -851,3 +849,11 @@
 class IProfile(Interface):
     """ Named profile.
     """
+
+class IImportStep(Interface):
+    """ Named import step.
+    """
+
+class IExportStep(Interface):
+    """ Named export step.
+    """

Modified: Products.GenericSetup/branches/gotcha-registries-use-utilities/Products/GenericSetup/registry.py
===================================================================
--- Products.GenericSetup/branches/gotcha-registries-use-utilities/Products/GenericSetup/registry.py	2011-03-03 14:25:53 UTC (rev 120737)
+++ Products.GenericSetup/branches/gotcha-registries-use-utilities/Products/GenericSetup/registry.py	2011-03-03 14:26:58 UTC (rev 120738)
@@ -31,6 +31,8 @@
 from Products.GenericSetup.interfaces import IToolsetRegistry
 from Products.GenericSetup.interfaces import IProfileRegistry
 from Products.GenericSetup.interfaces import IProfile
+from Products.GenericSetup.interfaces import IImportStep
+from Products.GenericSetup.interfaces import IExportStep
 from Products.GenericSetup.permissions import ManagePortal
 from Products.GenericSetup.metadata import ProfileMetadata
 from Products.GenericSetup.utils import _xmldir
@@ -227,12 +229,41 @@
 InitializeClass( _ExportStepRegistryParser )
 
 
+class GlobalRegistryStorage(object):
+
+    def __init__(self, interfaceClass):
+        self.interfaceClass = interfaceClass
+        self.sm = getGlobalSiteManager()
+
+    def keys(self):
+        keys = [name for name, info in self.sm.getUtilitiesFor(self.interfaceClass)]
+        return keys
+
+    def values(self):
+        values = [info for name, info in self.sm.getUtilitiesFor(self.interfaceClass)]
+        return values
+
+    def get(self, key):
+        return self.sm.queryUtility(provided=self.interfaceClass, name=key)
+
+    def __setitem__(self, id, info):
+        return self.sm.registerUtility(info, provided=self.interfaceClass, name=id)
+
+    def __delitem__(self, id):
+        return self.sm.unregisterUtility(provided=self.interfaceClass, name=id)
+
+    def clear(self):
+        for key in self.keys():
+            self.unregister(key)
+
 class BaseStepRegistry( Implicit ):
 
     security = ClassSecurityInfo()
 
-    def __init__( self ):
-
+    def __init__( self, store=None ):
+        if store is None:
+            store = {}
+        self._registered = store
         self.clear()
 
     security.declareProtected( ManagePortal, 'listSteps' )
@@ -288,22 +319,21 @@
 
         o Return 'default' if no such step is registered.
         """
-        marker = object()
-        info = self._registered.get( key, marker )
+        info = self._registered.get( key )
 
-        if info is marker:
+        if info is None:
             return default
 
         return _resolveDottedName( info[ 'handler' ] )
 
     security.declarePrivate( 'unregisterStep' )
     def unregisterStep( self, id ):
-        del self._registered[id]
+        del self._registered[ id ]
 
     security.declarePrivate( 'clear' )
     def clear( self ):
 
-        self._registered = {}
+        self._registered.clear()
 
     security.declarePrivate( 'parseXML' )
     def parseXML( self, text, encoding=None ):
@@ -452,7 +482,7 @@
 
 InitializeClass( ImportStepRegistry )
 
-_import_step_registry = ImportStepRegistry()
+_import_step_registry = ImportStepRegistry(GlobalRegistryStorage(IImportStep))
 
 class ExportStepRegistry( BaseStepRegistry ):
 
@@ -526,7 +556,7 @@
 
 InitializeClass( ExportStepRegistry )
 
-_export_step_registry = ExportStepRegistry()
+_export_step_registry = ExportStepRegistry(GlobalRegistryStorage(IExportStep))
 
 
 class ToolsetRegistry( Implicit ):
@@ -743,7 +773,7 @@
     security.declarePrivate( 'clear' )
     def clear( self ):
         sm = getGlobalSiteManager()
-        profile_ids = [profile_id for profile_id, profile_info 
+        profile_ids = [profile_id for profile_id, profile_info
             in sm.getUtilitiesFor(IProfile)]
         for profile_id in profile_ids:
             sm.unregisterUtility(provided=IProfile, name=profile_id)

Modified: Products.GenericSetup/branches/gotcha-registries-use-utilities/Products/GenericSetup/tests/test_stepzcml.py
===================================================================
--- Products.GenericSetup/branches/gotcha-registries-use-utilities/Products/GenericSetup/tests/test_stepzcml.py	2011-03-03 14:25:53 UTC (rev 120737)
+++ Products.GenericSetup/branches/gotcha-registries-use-utilities/Products/GenericSetup/tests/test_stepzcml.py	2011-03-03 14:26:58 UTC (rev 120738)
@@ -48,13 +48,14 @@
 
     def testEmptyImport(self):
         zcml.load_string(EMPTY_ZCML)
-        self.assertEqual(_import_step_registry._registered, {})
+        self.assertEqual(len(_import_step_registry.listSteps()), 0)
 
     def testOneStepImport(self):
         zcml.load_string(ONE_STEP_ZCML)
-        self.assertEqual(_import_step_registry._registered.keys(),
+        self.assertEqual(_import_step_registry.listSteps(),
             [ u'Products.GenericSetup.teststep'  ])
-        info = _import_step_registry._registered[ u'Products.GenericSetup.teststep' ]
+        info = _import_step_registry.getStepMetadata(
+            u'Products.GenericSetup.teststep')
         self.assertEqual( info['description'],
                 u'step description' )
         self.assertEqual( info['title'],

Modified: Products.GenericSetup/branches/gotcha-registries-use-utilities/Products/GenericSetup/tests/test_zcml.py
===================================================================
--- Products.GenericSetup/branches/gotcha-registries-use-utilities/Products/GenericSetup/tests/test_zcml.py	2011-03-03 14:25:53 UTC (rev 120737)
+++ Products.GenericSetup/branches/gotcha-registries-use-utilities/Products/GenericSetup/tests/test_zcml.py	2011-03-03 14:26:58 UTC (rev 120738)
@@ -362,8 +362,6 @@
                                  handler="Products.GenericSetup.tests.test_zcml.dummy_importstep_handler">
                              </genericsetup:importStep>
                             </configure>""")
-        from Products.GenericSetup.zcml import _import_step_regs
-        self.assertEqual(_import_step_regs, [u'name'])
         self.assertEqual( _import_step_registry.listSteps(), [u'name'])
         data=_import_step_registry.getStepMetadata(u'name')
         self.assertEqual(data["handler"],
@@ -412,8 +410,6 @@
                                  />
                               </configure>
                               """)
-        from Products.GenericSetup.zcml import _export_step_regs
-        self.assertEqual(_export_step_regs, [u'name'])
         self.assertEqual( _export_step_registry.listSteps(), [u'name'])
         data=_export_step_registry.getStepMetadata(u'name')
         self.assertEqual(data["handler"],

Modified: Products.GenericSetup/branches/gotcha-registries-use-utilities/Products/GenericSetup/zcml.py
===================================================================
--- Products.GenericSetup/branches/gotcha-registries-use-utilities/Products/GenericSetup/zcml.py	2011-03-03 14:25:53 UTC (rev 120737)
+++ Products.GenericSetup/branches/gotcha-registries-use-utilities/Products/GenericSetup/zcml.py	2011-03-03 14:26:58 UTC (rev 120738)
@@ -113,11 +113,8 @@
         required=True)
 
 
-_export_step_regs = []
 
 def exportStep(context, name, handler, title=None, description=None):
-    global _export_step_regs
-    _export_step_regs.append(name)
 
     context.action(
         discriminator=('exportStep', name),
@@ -162,8 +159,6 @@
         required=True)
 
 
-_import_step_regs = []
-
 class importStep:
 
     def __init__(self, context, name, title, description, handler):
@@ -181,8 +176,6 @@
         self.dependencies += (name,)
 
     def __call__(self):
-        global _import_step_regs
-        _import_step_regs.append(self.name)
 
         self.context.action(
             discriminator=self.discriminator,
@@ -382,25 +375,11 @@
 
 
 def cleanUpImportSteps():
-    global _import_step_regs
-    for name in _import_step_regs:
-        try:
-            _import_step_registry.unregisterStep(name)
-        except KeyError:
-            pass
+    pass
 
-    _import_step_regs = []
-
 def cleanUpExportSteps():
-    global _export_step_regs
-    for name in _export_step_regs:
-        try:
-            _export_step_registry.unregisterStep(name)
-        except KeyError:
-            pass
+    pass
 
-    _export_step_regs = []
-
 from zope.testing.cleanup import addCleanUp
 addCleanUp(cleanUpProfiles)
 addCleanUp(cleanUpImportSteps)



More information about the checkins mailing list