[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