[Checkins] SVN: Products.GenericSetup/trunk/Products/GenericSetup/ code cleanup:

Yvo Schubbe cvs-admin at zope.org
Tue Apr 24 10:37:25 UTC 2012


Log message for revision 125270:
  code cleanup:
  - replaced has_key
  - replaced oldstyle errors
  - PEP 8

Changed:
  U   Products.GenericSetup/trunk/Products/GenericSetup/components.py
  U   Products.GenericSetup/trunk/Products/GenericSetup/registry.py
  U   Products.GenericSetup/trunk/Products/GenericSetup/tool.py
  U   Products.GenericSetup/trunk/Products/GenericSetup/utils.py
  U   Products.GenericSetup/trunk/Products/GenericSetup/www/setup_upgrades.zpt

-=-
Modified: Products.GenericSetup/trunk/Products/GenericSetup/components.py
===================================================================
--- Products.GenericSetup/trunk/Products/GenericSetup/components.py	2012-04-24 10:37:03 UTC (rev 125269)
+++ Products.GenericSetup/trunk/Products/GenericSetup/components.py	2012-04-24 10:37:21 UTC (rev 125270)
@@ -46,7 +46,7 @@
     name = 'componentregistry'
 
     def _constructBlacklist(self):
-        blacklist = set((BLACKLIST_SELF, ))
+        blacklist = set((BLACKLIST_SELF,))
         utils = getUtilitiesFor(IComponentsHandlerBlacklist)
         for _, util in utils:
             names = [_getDottedName(i) for i in util.getExcludedInterfaces()]
@@ -195,8 +195,8 @@
 
             handler = child.getAttribute('handler')
             if handler:
-                raise ValueError, "Can not specify both a factory and a " \
-                                  "handler in a subscriber registration."
+                raise ValueError("Can not specify both a factory and a "
+                                 "handler in a subscriber registration.")
 
             factory = _resolveDottedName(factory)
 
@@ -235,12 +235,12 @@
 
             factory = child.getAttribute('factory')
             if factory:
-                raise ValueError, "Can not specify both a factory and a " \
-                                  "handler in a subscriber registration."
-            
+                raise ValueError("Can not specify both a factory and a "
+                                 "handler in a subscriber registration.")
+
             if child.hasAttribute('provides'):
-                raise ValueError, "Cannot use handler with provides " \
-                                  "in a subscriber registration."
+                raise ValueError("Cannot use handler with provides in a "
+                                 "subscriber registration.")
 
             handler = _resolveDottedName(handler)
 
@@ -299,10 +299,9 @@
                 continue
 
             if component and factory:
-                raise ValueError, "Can not specify both a factory and a " \
-                                  "component in a utility registration."
+                raise ValueError("Can not specify both a factory and a "
+                                 "component in a utility registration.")
 
-
             obj_path = child.getAttribute('object')
             if not component and not factory and obj_path is not None:
                 # Support for registering the site itself
@@ -327,10 +326,10 @@
                 self.context.registerUtility(component, provided, name)
             elif factory:
                 current = [ utility for utility in current_utilities
-                                    if utility.provided==provided and
-                                       utility.name==name ]
+                            if utility.provided == provided and
+                               utility.name == name ]
 
-                if current and getattr(current[0], "factory", None)==factory:
+                if current and getattr(current[0], "factory", None) == factory:
                     continue
 
                 obj = factory()

Modified: Products.GenericSetup/trunk/Products/GenericSetup/registry.py
===================================================================
--- Products.GenericSetup/trunk/Products/GenericSetup/registry.py	2012-04-24 10:37:03 UTC (rev 125269)
+++ Products.GenericSetup/trunk/Products/GenericSetup/registry.py	2012-04-24 10:37:21 UTC (rev 125270)
@@ -67,164 +67,146 @@
 
     security = ClassSecurityInfo()
     security.declareObjectPrivate()
-    security.setDefaultAccess( 'deny' )
+    security.setDefaultAccess('deny')
 
-    def __init__( self, encoding ):
-
+    def __init__(self, encoding):
         self._encoding = encoding
         self._required = {}
         self._forbidden = []
 
-    def startElement( self, name, attrs ):
-
+    def startElement(self, name, attrs):
         if name == 'tool-setup':
             pass
 
         elif name == 'forbidden':
+            tool_id = self._extract(attrs, 'tool_id')
 
-            tool_id = self._extract( attrs, 'tool_id' )
-
             if tool_id not in self._forbidden:
-                self._forbidden.append( tool_id )
+                self._forbidden.append(tool_id)
 
         elif name == 'required':
+            tool_id = self._extract(attrs, 'tool_id')
+            dotted_name = self._extract(attrs, 'class')
+            self._required[tool_id] = dotted_name
 
-            tool_id = self._extract( attrs, 'tool_id' )
-            dotted_name = self._extract( attrs, 'class' )
-            self._required[ tool_id ] = dotted_name
-
         else:
-            raise ValueError, 'Unknown element %s' % name
+            raise ValueError('Unknown element %s' % name)
 
-InitializeClass( _ToolsetParser )
+InitializeClass(_ToolsetParser)
 
+
 class _ImportStepRegistryParser(_HandlerBase):
 
     security = ClassSecurityInfo()
     security.declareObjectPrivate()
-    security.setDefaultAccess( 'deny' )
+    security.setDefaultAccess('deny')
 
-    def __init__( self, encoding ):
-
+    def __init__(self, encoding):
         self._encoding = encoding
         self._started = False
         self._pending = None
         self._parsed = []
 
-    def startElement( self, name, attrs ):
-
+    def startElement(self, name, attrs):
         if name == 'import-steps':
-
             if self._started:
-                raise ValueError, 'Duplicated setup-steps element: %s' % name
+                raise ValueError('Duplicated setup-steps element: %s' % name)
 
             self._started = True
 
         elif name == 'import-step':
-
             if self._pending is not None:
-                raise ValueError, 'Cannot nest setup-step elements'
+                raise ValueError('Cannot nest setup-step elements')
 
-            self._pending = dict( [ ( k, self._extract( attrs, k ) )
-                                    for k in attrs.keys() ] )
+            self._pending = dict([ (k, self._extract(attrs, k))
+                                   for k in attrs.keys() ])
 
-            self._pending[ 'dependencies' ] = []
+            self._pending['dependencies'] = []
 
         elif name == 'dependency':
-
             if not self._pending:
-                raise ValueError, 'Dependency outside of step'
+                raise ValueError('Dependency outside of step')
 
-            depended = self._extract( attrs, 'step' )
-            self._pending[ 'dependencies' ].append( depended )
+            depended = self._extract(attrs, 'step')
+            self._pending['dependencies'].append(depended)
 
         else:
-            raise ValueError, 'Unknown element %s' % name
+            raise ValueError('Unknown element %s' % name)
 
-    def characters( self, content ):
-
+    def characters(self, content):
         if self._pending is not None:
-            content = self._encode( content )
-            self._pending.setdefault( 'description', [] ).append( content )
+            content = self._encode(content)
+            self._pending.setdefault('description', []).append(content)
 
     def endElement(self, name):
-
         if name == 'import-steps':
             pass
 
         elif name == 'import-step':
-
             if self._pending is None:
-                raise ValueError, 'No pending step!'
+                raise ValueError('No pending step!')
 
-            deps = tuple( self._pending[ 'dependencies' ] )
-            self._pending[ 'dependencies' ] = deps
+            deps = tuple(self._pending['dependencies'])
+            self._pending['dependencies'] = deps
 
-            desc = ''.join( self._pending[ 'description' ] )
-            self._pending[ 'description' ] = desc
+            desc = ''.join(self._pending['description'])
+            self._pending['description'] = desc
 
-            self._parsed.append( self._pending )
+            self._parsed.append(self._pending)
             self._pending = None
 
-InitializeClass( _ImportStepRegistryParser )
+InitializeClass(_ImportStepRegistryParser)
 
 
 class _ExportStepRegistryParser(_HandlerBase):
 
     security = ClassSecurityInfo()
     security.declareObjectPrivate()
-    security.setDefaultAccess( 'deny' )
+    security.setDefaultAccess('deny')
 
-    def __init__( self, encoding ):
-
+    def __init__(self, encoding):
         self._encoding = encoding
         self._started = False
         self._pending = None
         self._parsed = []
 
-    def startElement( self, name, attrs ):
-
+    def startElement(self, name, attrs):
         if name == 'export-steps':
-
             if self._started:
-                raise ValueError, 'Duplicated export-steps element: %s' % name
+                raise ValueError('Duplicated export-steps element: %s' % name)
 
             self._started = True
 
         elif name == 'export-step':
-
             if self._pending is not None:
-                raise ValueError, 'Cannot nest export-step elements'
+                raise ValueError('Cannot nest export-step elements')
 
-            self._pending = dict( [ ( k, self._extract( attrs, k ) )
-                                    for k in attrs.keys() ] )
+            self._pending = dict([ (k, self._extract(attrs, k))
+                                   for k in attrs.keys() ])
 
         else:
-            raise ValueError, 'Unknown element %s' % name
+            raise ValueError('Unknown element %s' % name)
 
-    def characters( self, content ):
-
+    def characters(self, content):
         if self._pending is not None:
-            content = self._encode( content )
-            self._pending.setdefault( 'description', [] ).append( content )
+            content = self._encode(content)
+            self._pending.setdefault('description', []).append(content)
 
     def endElement(self, name):
-
         if name == 'export-steps':
             pass
 
         elif name == 'export-step':
-
             if self._pending is None:
-                raise ValueError, 'No pending step!'
+                raise ValueError('No pending step!')
 
-            desc = ''.join( self._pending[ 'description' ] )
-            self._pending[ 'description' ] = desc
+            desc = ''.join(self._pending['description'])
+            self._pending['description'] = desc
 
-            self._parsed.append( self._pending )
+            self._parsed.append(self._pending)
             self._pending = None
 
-InitializeClass( _ExportStepRegistryParser )
+InitializeClass(_ExportStepRegistryParser)
 
 
 class GlobalRegistryStorage(object):
@@ -234,14 +216,11 @@
 
     def keys(self):
         sm = getGlobalSiteManager()
-        keys = [name for name, info in sm.getUtilitiesFor(self.interfaceClass)]
-        return keys
+        return [ n for n, _i in sm.getUtilitiesFor(self.interfaceClass) ]
 
     def values(self):
         sm = getGlobalSiteManager()
-        values = [info for name, info
-                        in sm.getUtilitiesFor(self.interfaceClass)]
-        return values
+        return [ i for _n, i in sm.getUtilitiesFor(self.interfaceClass) ]
 
     def get(self, key):
         sm = getGlobalSiteManager()
@@ -259,103 +238,99 @@
         for key in self.keys():
             del self[key]
 
-class BaseStepRegistry( Implicit ):
 
+class BaseStepRegistry(Implicit):
+
     security = ClassSecurityInfo()
 
-    def __init__( self, store=None ):
+    def __init__(self, store=None):
         if store is None:
             store = {}
         self._registered = store
         self.clear()
 
-    security.declareProtected( ManagePortal, 'listSteps' )
-    def listSteps( self ):
-
+    security.declareProtected(ManagePortal, 'listSteps')
+    def listSteps(self):
         """ Return a list of registered step IDs.
         """
         return self._registered.keys()
 
-    security.declareProtected( ManagePortal, 'getStepMetadata' )
-    def getStepMetadata( self, key, default=None ):
-
+    security.declareProtected(ManagePortal, 'getStepMetadata')
+    def getStepMetadata(self, key, default=None):
         """ Return a mapping of metadata for the step identified by 'key'.
 
         o Return 'default' if no such step is registered.
 
         o The 'handler' metadata is available via 'getStep'.
         """
-        info = self._registered.get( key )
+        info = self._registered.get(key)
 
         if info is None:
             return default
 
         result = info.copy()
-        result['invalid'] =  _resolveDottedName( result[ 'handler' ] ) is None
+        result['invalid'] = _resolveDottedName(result['handler']) is None
 
         return result
 
-    security.declareProtected( ManagePortal, 'listStepMetadata' )
-    def listStepMetadata( self ):
-
+    security.declareProtected(ManagePortal, 'listStepMetadata')
+    def listStepMetadata(self):
         """ Return a sequence of mappings describing registered steps.
 
         o Mappings will be ordered alphabetically.
         """
         step_ids = self.listSteps()
         step_ids.sort()
-        return [ self.getStepMetadata( x ) for x in step_ids ]
+        return [ self.getStepMetadata(x) for x in step_ids ]
 
-    security.declareProtected( ManagePortal, 'generateXML' )
-    def generateXML( self, encoding='utf-8' ):
-
+    security.declareProtected(ManagePortal, 'generateXML')
+    def generateXML(self, encoding='utf-8'):
         """ Return a round-trippable XML representation of the registry.
 
         o 'handler' values are serialized using their dotted names.
         """
         return self._exportTemplate().encode('utf-8')
 
-    security.declarePrivate( 'getStep' )
-    def getStep( self, key, default=None ):
-
+    security.declarePrivate('getStep')
+    def getStep(self, key, default=None):
         """ Return the I(Export|Import)Plugin registered for 'key'.
 
         o Return 'default' if no such step is registered.
         """
-        info = self._registered.get( key )
+        info = self._registered.get(key)
 
         if info is None:
             return default
 
-        return _resolveDottedName( info[ 'handler' ] )
+        return _resolveDottedName(info['handler'])
 
-    security.declarePrivate( 'unregisterStep' )
-    def unregisterStep( self, id ):
-        del self._registered[ id ]
+    security.declarePrivate('unregisterStep')
+    def unregisterStep(self, id):
+        del self._registered[id]
 
-    security.declarePrivate( 'clear' )
-    def clear( self ):
-
+    security.declarePrivate('clear')
+    def clear(self):
         self._registered.clear()
 
-    security.declarePrivate( 'parseXML' )
-    def parseXML( self, text, encoding='utf-8' ):
-
+    security.declarePrivate('parseXML')
+    def parseXML(self, text, encoding='utf-8'):
         """ Parse 'text'.
         """
-        reader = getattr( text, 'read', None )
+        reader = getattr(text, 'read', None)
 
         if reader is not None:
             text = reader()
 
-        parser = self.RegistryParser( encoding )
-        parseString( text, parser )
+        parser = self.RegistryParser(encoding)
+        parseString(text, parser)
 
         return parser._parsed
-InitializeClass( BaseStepRegistry )
 
-class ImportStepRegistry( BaseStepRegistry ):
+InitializeClass(BaseStepRegistry)
 
+
+class ImportStepRegistry(BaseStepRegistry):
+
     """ Manage knowledge about steps to create / configure site.
 
     o Steps are composed together to define a site profile.
@@ -365,10 +340,8 @@
     security = ClassSecurityInfo()
     RegistryParser = _ImportStepRegistryParser
 
-
-    security.declareProtected( ManagePortal, 'sortSteps' )
-    def sortSteps( self ):
-
+    security.declareProtected(ManagePortal, 'sortSteps')
+    def sortSteps(self):
         """ Return a sequence of registered step IDs
 
         o Sequence is sorted topologically by dependency, with the dependent
@@ -376,9 +349,8 @@
         """
         return self._computeTopologicalSort()
 
-    security.declareProtected( ManagePortal, 'checkComplete' )
-    def checkComplete( self ):
-
+    security.declareProtected(ManagePortal, 'checkComplete')
+    def checkComplete(self):
         """ Return a sequence of ( node, edge ) tuples for unsatisifed deps.
         """
         result = []
@@ -388,26 +360,20 @@
 
         for node in graph:
 
-            dependencies = self.getStepMetadata( node )[ 'dependencies' ]
+            dependencies = self.getStepMetadata(node)['dependencies']
 
             for dependency in dependencies:
 
-                if seen.get( dependency ) is None:
-                    result.append( ( node, dependency ) )
+                if seen.get(dependency) is None:
+                    result.append((node, dependency))
 
-            seen[ node ] = 1
+            seen[node] = 1
 
         return result
 
-    security.declarePrivate( 'registerStep' )
-    def registerStep( self
-                    , id
-                    , version=None
-                    , handler=None
-                    , dependencies=()
-                    , title=None
-                    , description=None
-                    ):
+    security.declarePrivate('registerStep')
+    def registerStep(self, id, version=None, handler=None, dependencies=(),
+                     title=None, description=None):
         """ Register a setup step.
 
         o 'id' is a unique name for this step,
@@ -438,57 +404,55 @@
           If None, the remaining line of the documentation string of
           the handler is used, or default to ''.
         """
-        already = self.getStepMetadata( id )
+        already = self.getStepMetadata(id)
 
         if handler is None:
-            raise ValueError, 'No handler specified'
+            raise ValueError('No handler specified')
 
-        if already and already[ 'version' ] > version:
-            raise KeyError( 'Existing registration for step %s, version %s'
-                          % ( id, already[ 'version' ] ) )
+        if already and already['version'] > version:
+            raise KeyError('Existing registration for step %s, version %s'
+                           % (id, already['version']))
 
         if not isinstance(handler, str):
-            handler = _getDottedName( handler )
+            handler = _getDottedName(handler)
 
         if title is None or description is None:
 
             method = _resolveDottedName(handler)
             if method is None:
-                t,d = id, ''
+                t, d = id, ''
             else:
-                t, d = _extractDocstring( method, id, '' )
+                t, d = _extractDocstring(method, id, '')
 
             title = title or t
             description = description or d
 
-        info = { 'id'           : id
-               , 'version'      : version
-               , 'handler'      : handler
-               , 'dependencies' : dependencies
-               , 'title'        : title
-               , 'description'  : description
-               }
+        info = {'id': id,
+                'version': version,
+                'handler': handler,
+                'dependencies': dependencies,
+                'title': title,
+                'description': description}
 
-        self._registered[ id ] = info
+        self._registered[id] = info
 
-
     #
     #   Helper methods
     #
-    security.declarePrivate( '_computeTopologicalSort' )
-    def _computeTopologicalSort( self ):
+    security.declarePrivate('_computeTopologicalSort')
+    def _computeTopologicalSort(self):
         return _computeTopologicalSort(self._registered.values())
 
+    security.declarePrivate('_exportTemplate')
+    _exportTemplate = PageTemplateFile('isrExport.xml', _xmldir)
 
-    security.declarePrivate( '_exportTemplate' )
-    _exportTemplate = PageTemplateFile( 'isrExport.xml', _xmldir )
+InitializeClass(ImportStepRegistry)
 
-InitializeClass( ImportStepRegistry )
-
 _import_step_registry = ImportStepRegistry(GlobalRegistryStorage(IImportStep))
 
-class ExportStepRegistry( BaseStepRegistry ):
 
+class ExportStepRegistry(BaseStepRegistry):
+
     """ Registry of known site-configuration export steps.
 
     o Each step is registered with a unique id.
@@ -510,9 +474,8 @@
     security = ClassSecurityInfo()
     RegistryParser = _ExportStepRegistryParser
 
-    security.declarePrivate( 'registerStep' )
-    def registerStep( self, id, handler, title=None, description=None ):
-
+    security.declarePrivate('registerStep')
+    def registerStep(self, id, handler, title=None, description=None):
         """ Register an export step.
 
         o 'id' is the unique identifier for this step
@@ -529,234 +492,207 @@
           the step is used, or default to ''.
         """
         if not isinstance(handler, str):
-            handler = _getDottedName( handler )
+            handler = _getDottedName(handler)
 
         if title is None or description is None:
 
             method = _resolveDottedName(handler)
             if method is None:
-                t,d = id, ''
+                t, d = id, ''
             else:
-                t, d = _extractDocstring( method, id, '' )
+                t, d = _extractDocstring(method, id, '')
 
             title = title or t
             description = description or d
 
-        info = { 'id'           : id
-               , 'handler'      : handler
-               , 'title'        : title
-               , 'description'  : description
-               }
+        info = {'id': id,
+                'handler': handler,
+                'title': title,
+                'description': description}
 
-        self._registered[ id ] = info
+        self._registered[id] = info
 
-
     #
     #   Helper methods
     #
-    security.declarePrivate( '_exportTemplate' )
-    _exportTemplate = PageTemplateFile( 'esrExport.xml', _xmldir )
+    security.declarePrivate('_exportTemplate')
+    _exportTemplate = PageTemplateFile('esrExport.xml', _xmldir)
 
-InitializeClass( ExportStepRegistry )
+InitializeClass(ExportStepRegistry)
 
 _export_step_registry = ExportStepRegistry(GlobalRegistryStorage(IExportStep))
 
 
-class ToolsetRegistry( Implicit ):
+class ToolsetRegistry(Implicit):
 
     """ Track required / forbidden tools.
     """
     implements(IToolsetRegistry)
 
     security = ClassSecurityInfo()
-    security.setDefaultAccess( 'allow' )
+    security.setDefaultAccess('allow')
 
-    def __init__( self ):
-
+    def __init__(self):
         self.clear()
 
     #
     #   Toolset API
     #
-    security.declareProtected( ManagePortal, 'listForbiddenTools' )
-    def listForbiddenTools( self ):
-
+    security.declareProtected(ManagePortal, 'listForbiddenTools')
+    def listForbiddenTools(self):
         """ See IToolsetRegistry.
         """
-        result = list( self._forbidden )
+        result = list(self._forbidden)
         result.sort()
         return result
 
-    security.declareProtected( ManagePortal, 'addForbiddenTool' )
-    def addForbiddenTool( self, tool_id ):
-
+    security.declareProtected(ManagePortal, 'addForbiddenTool')
+    def addForbiddenTool(self, tool_id):
         """ See IToolsetRegistry.
         """
         if tool_id in self._forbidden:
             return
 
-        if self._required.get( tool_id ) is not None:
-            raise ValueError, 'Tool %s is required!' % tool_id
+        if self._required.get(tool_id) is not None:
+            raise ValueError('Tool %s is required!' % tool_id)
 
-        self._forbidden.append( tool_id )
+        self._forbidden.append(tool_id)
 
-    security.declareProtected( ManagePortal, 'listRequiredTools' )
-    def listRequiredTools( self ):
-
+    security.declareProtected(ManagePortal, 'listRequiredTools')
+    def listRequiredTools(self):
         """ See IToolsetRegistry.
         """
-        result = list( self._required.keys() )
+        result = list(self._required.keys())
         result.sort()
         return result
 
-    security.declareProtected( ManagePortal, 'getRequiredToolInfo' )
-    def getRequiredToolInfo( self, tool_id ):
-
+    security.declareProtected(ManagePortal, 'getRequiredToolInfo')
+    def getRequiredToolInfo(self, tool_id):
         """ See IToolsetRegistry.
         """
-        return self._required[ tool_id ]
+        return self._required[tool_id]
 
-    security.declareProtected( ManagePortal, 'listRequiredToolInfo' )
-    def listRequiredToolInfo( self ):
-
+    security.declareProtected(ManagePortal, 'listRequiredToolInfo')
+    def listRequiredToolInfo(self):
         """ See IToolsetRegistry.
         """
-        return [ self.getRequiredToolInfo( x )
-                        for x in self.listRequiredTools() ]
+        return [ self.getRequiredToolInfo(x)
+                 for x in self.listRequiredTools() ]
 
-    security.declareProtected( ManagePortal, 'addRequiredTool' )
-    def addRequiredTool( self, tool_id, dotted_name ):
-
+    security.declareProtected(ManagePortal, 'addRequiredTool')
+    def addRequiredTool(self, tool_id, dotted_name):
         """ See IToolsetRegistry.
         """
         if tool_id in self._forbidden:
-            raise ValueError, "Forbidden tool ID: %s" % tool_id
+            raise ValueError("Forbidden tool ID: %s" % tool_id)
 
-        self._required[ tool_id ] = { 'id' : tool_id
-                                    , 'class' : dotted_name
-                                    }
+        self._required[tool_id] = {'id': tool_id, 'class': dotted_name}
 
-    security.declareProtected( ManagePortal, 'generateXML' )
-    def generateXML( self, encoding='utf-8' ):
-
+    security.declareProtected(ManagePortal, 'generateXML')
+    def generateXML(self, encoding='utf-8'):
         """ Pseudo API.
         """
         return self._toolsetConfig().encode('utf-8')
 
-    security.declareProtected( ManagePortal, 'parseXML' )
-    def parseXML( self, text, encoding='utf-8' ):
-
+    security.declareProtected(ManagePortal, 'parseXML')
+    def parseXML(self, text, encoding='utf-8'):
         """ Pseudo-API
         """
-        reader = getattr( text, 'read', None )
+        reader = getattr(text, 'read', None)
 
         if reader is not None:
             text = reader()
 
-        parser = _ToolsetParser( encoding )
-        parseString( text, parser )
+        parser = _ToolsetParser(encoding)
+        parseString(text, parser)
 
         for tool_id in parser._forbidden:
-            self.addForbiddenTool( tool_id )
+            self.addForbiddenTool(tool_id)
 
         for tool_id, dotted_name in parser._required.items():
-            self.addRequiredTool( tool_id, dotted_name )
+            self.addRequiredTool(tool_id, dotted_name)
 
-    security.declarePrivate( 'clear' )
-    def clear( self ):
-
+    security.declarePrivate('clear')
+    def clear(self):
         self._forbidden = []
         self._required = {}
 
     #
     #   Helper methods.
     #
-    security.declarePrivate( '_toolsetConfig' )
-    _toolsetConfig = PageTemplateFile( 'tscExport.xml'
-                                     , _xmldir
-                                     , __name__='toolsetConfig'
-                                     )
+    security.declarePrivate('_toolsetConfig')
+    _toolsetConfig = PageTemplateFile('tscExport.xml', _xmldir,
+                                      __name__='toolsetConfig')
 
-InitializeClass( ToolsetRegistry )
+InitializeClass(ToolsetRegistry)
 
 
-class ProfileRegistry( Implicit ):
+class ProfileRegistry(Implicit):
 
     """ Track registered profiles.
     """
     implements(IProfileRegistry)
 
     security = ClassSecurityInfo()
-    security.setDefaultAccess( 'allow' )
+    security.setDefaultAccess('allow')
 
-    def __init__( self ):
+    def __init__(self):
         self._registered = GlobalRegistryStorage(IProfile)
         self.clear()
 
-    security.declareProtected( ManagePortal, 'getProfileInfo' )
-    def getProfileInfo( self, profile_id, for_=None ):
-
+    security.declareProtected(ManagePortal, 'getProfileInfo')
+    def getProfileInfo(self, profile_id, for_=None):
         """ See IProfileRegistry.
         """
         result = self._registered.get(profile_id)
         if result is None:
-            raise KeyError, profile_id
+            raise KeyError(profile_id)
         if for_ is not None:
-            if not issubclass( for_, result['for'] ):
-                raise KeyError, profile_id
+            if not issubclass(for_, result['for']):
+                raise KeyError(profile_id)
         return result.copy()
 
-    security.declareProtected( ManagePortal, 'listProfiles' )
-    def listProfiles( self, for_=None ):
-
+    security.declareProtected(ManagePortal, 'listProfiles')
+    def listProfiles(self, for_=None):
         """ See IProfileRegistry.
         """
         result = []
         for profile_id in self._registered.keys():
-            info = self.getProfileInfo( profile_id )
-            if for_ is None or issubclass( for_, info['for'] ):
-                result.append( profile_id )
-        return tuple( result )
+            info = self.getProfileInfo(profile_id)
+            if for_ is None or issubclass(for_, info['for']):
+                result.append(profile_id)
+        return tuple(result)
 
-    security.declareProtected( ManagePortal, 'listProfileInfo' )
-    def listProfileInfo( self, for_=None ):
-
+    security.declareProtected(ManagePortal, 'listProfileInfo')
+    def listProfileInfo(self, for_=None):
         """ See IProfileRegistry.
         """
-        candidates = [ self.getProfileInfo( id )
-                        for id in self.listProfiles() ]
+        candidates = [ self.getProfileInfo(id)
+                       for id in self.listProfiles() ]
         return [ x for x in candidates if for_ is None or x['for'] is None or
-                 issubclass( for_, x['for'] ) ]
+                 issubclass(for_, x['for']) ]
 
-    security.declareProtected( ManagePortal, 'registerProfile' )
-    def registerProfile( self
-                       , name
-                       , title
-                       , description
-                       , path
-                       , product=None
-                       , profile_type=BASE
-                       , for_=None
-                       ):
+    security.declareProtected(ManagePortal, 'registerProfile')
+    def registerProfile(self, name, title, description, path, product=None,
+                        profile_type=BASE, for_=None):
         """ See IProfileRegistry.
         """
         profile_id = self._computeProfileId(name, product)
         if self._registered.get(profile_id) is not None:
-            raise KeyError, 'Duplicate profile ID: %s' % profile_id
+            raise KeyError('Duplicate profile ID: %s' % profile_id)
 
-        info = { 'id' : profile_id
-               , 'title' : title
-               , 'description' : description
-               , 'path' : path
-               , 'product' : product
-               , 'type': profile_type
-               , 'for': for_
-               }
+        info = {'id': profile_id,
+                'title': title,
+                'description': description,
+                'path': path,
+                'product': product,
+                'type': profile_type,
+                'for': for_}
 
         metadata = ProfileMetadata(path, product=product)()
 
         # metadata.xml description trumps ZCML description... awkward
-        info.update( metadata )
+        info.update(metadata)
 
         self._registered[profile_id] = info
 
@@ -764,16 +700,16 @@
         profile_id = '%s:%s' % (product or 'other', name)
         return profile_id
 
-    security.declareProtected( ManagePortal, 'unregisterProfile' )
-    def unregisterProfile( self, name, product=None):
+    security.declareProtected(ManagePortal, 'unregisterProfile')
+    def unregisterProfile(self, name, product=None):
         profile_id = self._computeProfileId(name, product)
         del self._registered[profile_id]
 
-    security.declarePrivate( 'clear' )
-    def clear( self ):
+    security.declarePrivate('clear')
+    def clear(self):
         self._registered.clear()
 
 
-InitializeClass( ProfileRegistry )
+InitializeClass(ProfileRegistry)
 
 _profile_registry = ProfileRegistry()

Modified: Products.GenericSetup/trunk/Products/GenericSetup/tool.py
===================================================================
--- Products.GenericSetup/trunk/Products/GenericSetup/tool.py	2012-04-24 10:37:03 UTC (rev 125269)
+++ Products.GenericSetup/trunk/Products/GenericSetup/tool.py	2012-04-24 10:37:21 UTC (rev 125270)
@@ -25,7 +25,7 @@
 from OFS.Folder import Folder
 from OFS.Image import File
 from Products.PageTemplates.PageTemplateFile import PageTemplateFile
-from zope import event 
+from zope import event
 from zope.interface import implements
 
 from Products.GenericSetup.context import DirectoryImportContext
@@ -60,7 +60,6 @@
 TOOLSET_XML = 'toolset.xml'
 
 def exportStepRegistries(context):
-
     """ Built-in handler for exporting import / export step registries.
     """
     setup_tool = context.getSetupTool()
@@ -83,7 +82,6 @@
         logger.debug('No local export steps.')
 
 def importToolset(context):
-
     """ Import required / forbidden tools from XML file.
     """
     site = context.getSite()
@@ -139,7 +137,6 @@
     logger.info('Toolset imported.')
 
 def exportToolset(context):
-
     """ Export required / forbidden tools to XML file.
     """
     setup_tool = context.getSetupTool()
@@ -306,7 +303,7 @@
         info = self.getImportStepMetadata(step_id)
 
         if info is None:
-            raise ValueError, 'No such import step: %s' % step_id
+            raise ValueError('No such import step: %s' % step_id)
 
         dependencies = info.get('dependencies', ())
 
@@ -317,9 +314,9 @@
             for dependency in dependencies:
                 if dependency not in steps:
                     steps.append(dependency)
-        steps.append (step_id)
+        steps.append(step_id)
 
-        full_import=(set(steps)==set(self.getSortedImportSteps()))
+        full_import = (set(steps) == set(self.getSortedImportSteps()))
         event.notify(
             BeforeProfileImportEvent(self, profile_id, steps, full_import))
 
@@ -328,13 +325,13 @@
             messages[step] = message or ''
 
         message_list = filter(None, [message])
-        message_list.extend( ['%s: %s' % x[1:] for x in context.listNotes()] )
+        message_list.extend([ '%s: %s' % x[1:] for x in context.listNotes() ])
         messages[step_id] = '\n'.join(message_list)
 
         event.notify(
             ProfileImportedEvent(self, profile_id, steps, full_import))
 
-        return { 'steps' : steps, 'messages' : messages }
+        return {'steps': steps, 'messages': messages}
 
     security.declareProtected(ManagePortal, 'runAllImportStepsFromProfile')
     def runAllImportStepsFromProfile(self,
@@ -391,13 +388,11 @@
 
             messages[step_id] = handler(context)
 
+        return {'steps': steps,
+                'messages': messages,
+                'url': context.getSnapshotURL(),
+                'snapshot': context.getSnapshotFolder()}
 
-        return { 'steps' : steps
-               , 'messages' : messages
-               , 'url' : context.getSnapshotURL()
-               , 'snapshot' : context.getSnapshotFolder()
-               }
-
     security.declareProtected(ManagePortal, 'compareConfigurations')
     def compareConfigurations(self,
                               lhs_context,
@@ -467,31 +462,16 @@
     #
     #   ZMI
     #
-    manage_options = (Folder.manage_options[:1]
-                    + ({'label' : 'Profiles',
-                        'action' : 'manage_tool'
-                       },
-                       {'label' : 'Import',
-                        'action' : 'manage_importSteps'
-                       },
-                       {'label' : 'Export',
-                        'action' : 'manage_exportSteps'
-                       },
-                       {'label' : 'Upgrades',
-                        'action' : 'manage_upgrades'
-                        },
-                       {'label' : 'Snapshots',
-                        'action' : 'manage_snapshots'
-                       },
-                       {'label' : 'Comparison',
-                        'action' : 'manage_showDiff'
-                       },
-                       {'label' : 'Manage',
-                        'action' : 'manage_stepRegistry'
-                       },
-                      )
-                    + Folder.manage_options[3:] # skip "View", "Properties"
-                     )
+    manage_options = (
+        Folder.manage_options[:1] +
+        ({'label': 'Profiles', 'action': 'manage_tool'},
+         {'label': 'Import', 'action': 'manage_importSteps'},
+         {'label': 'Export', 'action': 'manage_exportSteps'},
+         {'label': 'Upgrades', 'action': 'manage_upgrades'},
+         {'label': 'Snapshots', 'action': 'manage_snapshots'},
+         {'label': 'Comparison', 'action': 'manage_showDiff'},
+         {'label': 'Manage', 'action': 'manage_stepRegistry'}) +
+        Folder.manage_options[3:]) # skip "View", "Properties"
 
     security.declareProtected(ManagePortal, 'manage_tool')
     manage_tool = PageTemplateFile('sutProperties', _wwwdir)
@@ -564,7 +544,7 @@
                                   % (self.absolute_url(), message))
         else:
             message = 'Imported profiles: %s' % ', '.join(profile_ids)
-        
+
             for profile_id in profile_ids:
 
                 result = self.runAllImportStepsFromProfile(profile_id)
@@ -641,13 +621,10 @@
         snapshots = self._getOb('snapshots', None)
 
         if snapshots:
-
             for id, folder in snapshots.objectItems('Folder'):
-
-                result.append({ 'id' : id
-                               , 'title' : folder.title_or_id()
-                               , 'url' : folder.absolute_url()
-                               })
+                result.append({'id': id,
+                               'title': folder.title_or_id(),
+                               'url': folder.absolute_url()})
         return result
 
     security.declareProtected(ManagePortal, 'listProfileInfo')
@@ -709,7 +686,7 @@
         """
         prefix = ('import-all-%s-' % profile_id).replace(':', '_')
         candidates = [x for x in self.objectIds('File')
-                        if x[:-18]==prefix and x.endswith('.log')]
+                        if x[:-18] == prefix and x.endswith('.log')]
         if len(candidates) == 0:
             return None
         candidates.sort()
@@ -788,7 +765,7 @@
             request = self.REQUEST
         for id in ids:
             self._import_registry.unregisterStep(id)
-        self._p_changed=True
+        self._p_changed = True
         url = self.absolute_url()
         request.RESPONSE.redirect("%s/manage_stepRegistry" % url)
 
@@ -800,7 +777,7 @@
             request = self.REQUEST
         for id in ids:
             self._export_registry.unregisterStep(id)
-        self._p_changed=True
+        self._p_changed = True
         url = self.absolute_url()
         request.RESPONSE.redirect("%s/manage_stepRegistry" % url)
 
@@ -829,13 +806,13 @@
         """Return the registered filesystem version for the specified
         profile.
         """
-        return self.getProfileInfo( profile_id ).get('version', 'unknown')
+        return self.getProfileInfo(profile_id).get('version', 'unknown')
 
     security.declareProtected(ManagePortal, 'profileExists')
     def profileExists(self, profile_id):
         """Check if a profile exists."""
         try:
-            self.getProfileInfo( profile_id )
+            self.getProfileInfo(profile_id)
         except KeyError:
             return False
         else:
@@ -854,10 +831,10 @@
         if profile_id.startswith("snapshot-"):
             return ()
 
-        if not self.profileExists( profile_id ):
-            raise KeyError, profile_id
+        if not self.profileExists(profile_id):
+            raise KeyError(profile_id)
         try:
-            return self.getProfileInfo( profile_id ).get('dependencies', ())
+            return self.getProfileInfo(profile_id).get('dependencies', ())
         except KeyError:
             return ()
 
@@ -940,8 +917,8 @@
                 info = _profile_registry.getProfileInfo(context_id)
 
                 if info.get('product'):
-                    path = os.path.join(_getProductPath(info['product'])
-                                       , info['path'])
+                    path = os.path.join(_getProductPath(info['product']),
+                                        info['path'])
                 else:
                     path = info['path']
                 if should_purge is None:
@@ -963,7 +940,7 @@
                                        should_purge=should_purge,
                                       )
 
-        raise KeyError, 'Unknown context "%s"' % context_id
+        raise KeyError('Unknown context "%s"' % context_id)
 
     security.declarePrivate('_updateImportStepsRegistry')
     def _updateImportStepsRegistry(self, context, encoding):
@@ -1058,11 +1035,10 @@
             else:
                 messages[step_id] = handler(context)
 
-        return { 'steps' : steps
-               , 'messages' : messages
-               , 'tarball' : context.getArchive()
-               , 'filename' : context.getArchiveFilename()
-               }
+        return {'steps': steps,
+                'messages': messages,
+                'tarball': context.getArchive(),
+                'filename': context.getArchiveFilename()}
 
     security.declareProtected(ManagePortal, 'getProfileDependencyChain')
     def getProfileDependencyChain(self, profile_id, seen=None):
@@ -1070,12 +1046,12 @@
             seen = set()
         elif profile_id in seen:
             return [] # cycle break
-        seen.add( profile_id )
+        seen.add(profile_id)
         chain = []
 
-        dependencies = self.getDependenciesForProfile( profile_id )
+        dependencies = self.getDependenciesForProfile(profile_id)
         for dependency in dependencies:
-            chain.extend(self.getProfileDependencyChain( dependency, seen ))
+            chain.extend(self.getProfileDependencyChain(dependency, seen))
 
         chain.append(profile_id)
 
@@ -1091,19 +1067,18 @@
                                    seen=None):
 
         if profile_id is not None and not ignore_dependencies:
-            try: 
-                chain = self.getProfileDependencyChain( profile_id )
+            try:
+                chain = self.getProfileDependencyChain(profile_id)
             except KeyError, e:
                 logger = logging.getLogger('GenericSetup')
                 logger.error('Unknown step in dependency chain: %s' % str(e))
                 raise
         else:
-            chain = [ profile_id ]
+            chain = [profile_id]
             if seen is None:
-                seen=set()
-            seen.add( profile_id )
+                seen = set()
+            seen.add(profile_id)
 
-        
         results = []
 
         detect_steps = steps is None
@@ -1122,16 +1097,16 @@
             for step in steps:
                 message = self._doRunImportStep(step, context)
                 message_list = filter(None, [message])
-                message_list.extend( ['%s: %s' % x[1:]
-                                      for x in context.listNotes()] )
+                message_list.extend([ '%s: %s' % x[1:]
+                                      for x in context.listNotes() ])
                 messages[step] = '\n'.join(message_list)
                 context.clearNotes()
 
             event.notify(ProfileImportedEvent(self, profile_id, steps, True))
 
-            results.append({'steps' : steps, 'messages' : messages })
+            results.append({'steps': steps, 'messages': messages})
 
-        data = { 'steps' : [], 'messages' : {}}
+        data = {'steps': [], 'messages': {}}
         for result in results:
             for step in result['steps']:
                 if step not in data['steps']:
@@ -1139,9 +1114,9 @@
 
             for (step, msg) in result['messages'].items():
                 if step in data['messages']:
-                    data['messages'][step]+="\n"+msg
+                    data['messages'][step] += "\n" + msg
                 else:
-                    data['messages'][step]=msg
+                    data['messages'][step] = msg
         data['steps'] = list(data['steps'])
 
         return data
@@ -1200,7 +1175,7 @@
 InitializeClass(SetupTool)
 
 
-_PLAINTEXT_DIFF_HEADER ="""\
+_PLAINTEXT_DIFF_HEADER = """\
 Comparing configurations: '%s' and '%s'
 
 %s"""

Modified: Products.GenericSetup/trunk/Products/GenericSetup/utils.py
===================================================================
--- Products.GenericSetup/trunk/Products/GenericSetup/utils.py	2012-04-24 10:37:03 UTC (rev 125269)
+++ Products.GenericSetup/trunk/Products/GenericSetup/utils.py	2012-04-24 10:37:21 UTC (rev 125270)
@@ -44,20 +44,20 @@
 from Products.GenericSetup.permissions import ManagePortal
 
 
-_pkgdir = package_home( globals() )
-_wwwdir = os.path.join( _pkgdir, 'www' )
-_xmldir = os.path.join( _pkgdir, 'xml' )
+_pkgdir = package_home(globals())
+_wwwdir = os.path.join(_pkgdir, 'www')
+_xmldir = os.path.join(_pkgdir, 'xml')
 
-# Please note that these values may change. Always import 
+# Please note that these values may change. Always import
 # the values from here instead of using the values directly.
 CONVERTER, DEFAULT, KEY = 1, 2, 3
 I18NURI = 'http://xml.zope.org/namespaces/i18n'
 
 
-def _getDottedName( named ):
+def _getDottedName(named):
 
-    if isinstance( named, basestring ):
-        return str( named )
+    if isinstance(named, basestring):
+        return str(named)
 
     try:
         dotted = '%s.%s' % (named.__module__, named.__name__)
@@ -88,48 +88,47 @@
 
     return short_dotted
 
-def _resolveDottedName( dotted ):
-
+def _resolveDottedName(dotted):
     __traceback_info__ = dotted
 
-    parts = dotted.split( '.' )
+    parts = dotted.split('.')
 
     if not parts:
-        raise ValueError, "incomplete dotted name: %s" % dotted
+        raise ValueError("incomplete dotted name: %s" % dotted)
 
     parts_copy = parts[:]
 
     while parts_copy:
         try:
-            module = __import__( '.'.join( parts_copy ) )
+            module = __import__('.'.join(parts_copy))
             break
 
         except ImportError:
             # Reraise if the import error was caused inside the imported file
-            if sys.exc_info()[2].tb_next is not None: raise
+            if sys.exc_info()[2].tb_next is not None:
+                raise
 
-            del parts_copy[ -1 ]
+            del parts_copy[-1]
 
             if not parts_copy:
                 return None
 
-    parts = parts[ 1: ] # Funky semantics of __import__'s return value
+    parts = parts[1:] # Funky semantics of __import__'s return value
 
     obj = module
 
     for part in parts:
         try:
-            obj = getattr( obj, part )
+            obj = getattr(obj, part)
         except AttributeError:
             return None
 
     return obj
 
-def _extractDocstring( func, default_title, default_description ):
-
+def _extractDocstring(func, default_title, default_description):
     try:
-        doc = getdoc( func )
-        lines = doc.split( '\n' )
+        doc = getdoc(func)
+        lines = doc.split('\n')
 
     except AttributeError:
 
@@ -137,12 +136,12 @@
         description = default_description
 
     else:
-        title = lines[ 0 ]
+        title = lines[0]
 
-        if len( lines ) > 1 and lines[ 1 ].strip() == '':
-            del lines[ 1 ]
+        if len(lines) > 1 and lines[1].strip() == '':
+            del lines[1]
 
-        description = '\n'.join( lines[ 1: ] )
+        description = '\n'.join(lines[1:])
 
     return title, description
 
@@ -190,7 +189,7 @@
         info = {}
 
         for name, val in node.attributes.items():
-            key = node_map[name].get( KEY, str(name) )
+            key = node_map[name].get(KEY, str(name))
             val = self._encoding and val.encode(self._encoding) or val
             info[key] = val
 
@@ -201,8 +200,8 @@
                 continue
 
             if not name == '#text':
-                key = node_map[name].get(KEY, str(name) )
-                info[key] = info.setdefault( key, () ) + (
+                key = node_map[name].get(KEY, str(name))
+                info[key] = info.setdefault(key, ()) + (
                                                     self._extractNode(child),)
 
             elif '#text' in node_map:
@@ -215,13 +214,13 @@
             key = v.get(KEY, k)
 
             if DEFAULT in v and not key in info:
-                if isinstance( v[DEFAULT], basestring ):
+                if isinstance(v[DEFAULT], basestring):
                     info[key] = v[DEFAULT] % info
                 else:
                     info[key] = v[DEFAULT]
 
             elif CONVERTER in v and key in info:
-                info[key] = v[CONVERTER]( info[key] )
+                info[key] = v[CONVERTER](info[key])
 
             if key is None:
                 info = info[key]
@@ -337,7 +336,7 @@
         wrapper = _LineWrapper(writer, indent, addindent, newl, 78)
         wrapper.write('<%s' % self.tagName)
 
-        # move 'name', 'meta_type' and 'title' to the top, sort the rest 
+        # move 'name', 'meta_type' and 'title' to the top, sort the rest
         attrs = self._get_attributes()
         a_names = attrs.keys()
         a_names.sort()
@@ -375,7 +374,7 @@
                             wrapper.queue('%s%s' % (addindent, textline))
                 else:
                     wrapper.write('', True)
-                    node.writexml(writer, indent+addindent, addindent, newl)
+                    node.writexml(writer, indent + addindent, addindent, newl)
             wrapper.write('</%s>' % self.tagName, True)
         else:
             wrapper.write('/>', True)
@@ -392,13 +391,13 @@
         return e
 
     def createElementNS(self, namespaceURI, qualifiedName):
-        prefix, localName = _nssplit(qualifiedName)
+        prefix, _localName = _nssplit(qualifiedName)
         e = _Element(qualifiedName, namespaceURI, prefix)
         e.ownerDocument = self
         return e
 
     def writexml(self, writer, indent="", addindent="", newl="",
-                 encoding = 'utf-8'):
+                 encoding='utf-8'):
         if encoding is None:
             writer.write('<?xml version="1.0"?>\n')
         else:
@@ -530,7 +529,7 @@
         objects = self.context.objectValues()
         if not IOrderedContainer.providedBy(self.context):
             objects = list(objects)
-            objects.sort(lambda x,y: cmp(x.getId(), y.getId()))
+            objects.sort(lambda x, y: cmp(x.getId(), y.getId()))
         for obj in objects:
             exporter = queryMultiAdapter((obj, self.environ), INode)
             if exporter:
@@ -591,7 +590,7 @@
                         position = parent.getObjectPosition(insert_after)
                         if parent.getObjectPosition(obj_id) < position:
                             position -= 1
-                        parent.moveObjectToPosition(obj_id, position+1)
+                        parent.moveObjectToPosition(obj_id, position + 1)
                     except ValueError:
                         pass
 
@@ -602,10 +601,11 @@
 
 
 class PropertyManagerHelpers(object):
+
     """PropertyManager im- and export helpers.
-    
+
       o Derived classes can supply a '_PROPERTIES' scehma, which is then used
-        to mock up a temporary propertysheet for the object.  The adapter's 
+        to mock up a temporary propertysheet for the object.  The adapter's
         methods ('_extractProperties', '_purgeProperties', '_initProperties')
         then run against that propertysheet.
     """
@@ -617,7 +617,7 @@
         from OFS.PropertyManager import PropertyManager
         if not isinstance(context, PropertyManager):
             context = self._fauxAdapt(context)
-            
+
         super(PropertyManagerHelpers, self).__init__(context, environ)
 
     def _fauxAdapt(self, context):
@@ -763,7 +763,7 @@
                 prop = obj.getProperty(prop_id)
                 if isinstance(prop, (tuple, list)):
                     prop_value = (tuple([p for p in prop
-                                         if p not in prop_value and 
+                                         if p not in prop_value and
                                             p not in remove_elements]) +
                                   tuple(prop_value))
 
@@ -816,7 +816,7 @@
 
     if getattr(obj, 'objectValues', False):
         for sub in obj.objectValues():
-            exportObjects(sub, path+'/', context)
+            exportObjects(sub, path + '/', context)
 
 def importObjects(obj, parent_path, context):
     """ Import subobjects recursively.
@@ -835,12 +835,12 @@
 
     if getattr(obj, 'objectValues', False):
         for sub in obj.objectValues():
-            importObjects(sub, path+'/', context)
+            importObjects(sub, path + '/', context)
 
 
-def _computeTopologicalSort( steps ):
+def _computeTopologicalSort(steps):
     result = []
-    graph = [ ( x[ 'id' ], x[ 'dependencies' ] ) for x in steps ]
+    graph = [ (x['id'], x['dependencies']) for x in steps ]
 
     unresolved = []
 
@@ -854,12 +854,12 @@
 
                 if edge in result:
                     resolved += 1
-                    after = max( after, result.index( edge ) )
-            
+                    after = max(after, result.index(edge))
+
             if len(edges) > resolved:
                 unresolved.append((node, edges))
             else:
-                result.insert( after + 1, node )
+                result.insert(after + 1, node)
 
         if not unresolved:
             break
@@ -876,7 +876,7 @@
                     log_msg += '"%s" -> "%s"; ' % (step_id, dependency)
                 if not step['dependencies']:
                     log_msg += '"%s";' % step_id
-            for unresolved_key, ignore in unresolved:
+            for unresolved_key, _ignore in unresolved:
                 log_msg += '"%s" [color=red,style=filled]; ' % unresolved_key
             log_msg += '}'
             logger.warning(log_msg)
@@ -886,24 +886,21 @@
             break
         graph = unresolved
         unresolved = []
-    
+
     return result
 
 def _getProductPath(product_name):
-
     """ Return the absolute path of the product's directory.
     """
     try:
         # BBB: for GenericSetup 1.1 style product names
-        product = __import__('Products.%s' % product_name
-                            , globals(), {}, ['initialize'])
+        product = __import__('Products.%s' % product_name, globals(), {},
+                             ['initialize'])
     except ImportError:
         try:
-            product = __import__(product_name
-                                , globals(), {}, ['initialize'])
+            product = __import__(product_name, globals(), {}, ['initialize'])
         except ImportError:
             raise ValueError('Not a valid product name: %s'
                              % product_name)
 
     return product.__path__[0]
-

Modified: Products.GenericSetup/trunk/Products/GenericSetup/www/setup_upgrades.zpt
===================================================================
--- Products.GenericSetup/trunk/Products/GenericSetup/www/setup_upgrades.zpt	2012-04-24 10:37:03 UTC (rev 125269)
+++ Products.GenericSetup/trunk/Products/GenericSetup/www/setup_upgrades.zpt	2012-04-24 10:37:21 UTC (rev 125270)
@@ -4,7 +4,7 @@
 <h1 tal:replace="structure context/manage_page_header">PAGE HEADER</h1>
 <h2 tal:replace="structure context/manage_tabs">TABS</h2>
 
-<strong tal:condition="python:request.form.has_key('saved')">
+<strong tal:condition="python:'saved' in request.form">
   <span tal:replace="request/saved" /> profile saved.
 </strong>
 



More information about the checkins mailing list