[Checkins]
SVN: Products.GenericSetup/trunk/Products/GenericSetup/registry.py
Somehow I keep forgetting order is relevant in python
Wichert Akkerman
wichert at wiggy.net
Fri Dec 28 09:14:51 EST 2007
Log message for revision 82494:
Somehow I keep forgetting order is relevant in python
Changed:
U Products.GenericSetup/trunk/Products/GenericSetup/registry.py
-=-
Modified: Products.GenericSetup/trunk/Products/GenericSetup/registry.py
===================================================================
--- Products.GenericSetup/trunk/Products/GenericSetup/registry.py 2007-12-28 14:12:27 UTC (rev 82493)
+++ Products.GenericSetup/trunk/Products/GenericSetup/registry.py 2007-12-28 14:14:51 UTC (rev 82494)
@@ -39,7 +39,193 @@
from utils import _extractDocstring
from utils import _computeTopologicalSort
+#
+# XML parser
+#
+class _HandlerBase(ContentHandler):
+
+ _MARKER = object()
+
+ def _extract(self, attrs, key):
+ result = attrs.get(key, self._MARKER)
+
+ if result is self._MARKER:
+ return None
+
+ return self._encode(result)
+
+ def _encode(self, content):
+ if self._encoding is None:
+ return content
+
+ return content.encode(self._encoding)
+
+
+class _ToolsetParser(_HandlerBase):
+
+ security = ClassSecurityInfo()
+ security.declareObjectPrivate()
+ security.setDefaultAccess( 'deny' )
+
+ def __init__( self, encoding ):
+
+ self._encoding = encoding
+ self._required = {}
+ self._forbidden = []
+
+ def startElement( self, name, attrs ):
+
+ if name == 'tool-setup':
+ pass
+
+ elif name == 'forbidden':
+
+ tool_id = self._extract( attrs, 'tool_id' )
+
+ if tool_id not in self._forbidden:
+ 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
+
+ else:
+ raise ValueError, 'Unknown element %s' % name
+
+InitializeClass( _ToolsetParser )
+
+class _ImportStepRegistryParser(_HandlerBase):
+
+ security = ClassSecurityInfo()
+ security.declareObjectPrivate()
+ security.setDefaultAccess( 'deny' )
+
+ def __init__( self, encoding ):
+
+ self._encoding = encoding
+ self._started = False
+ self._pending = None
+ self._parsed = []
+
+ def startElement( self, name, attrs ):
+
+ if name == 'import-steps':
+
+ if self._started:
+ 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'
+
+ self._pending = dict( [ ( k, self._extract( attrs, k ) )
+ for k in attrs.keys() ] )
+
+ self._pending[ 'dependencies' ] = []
+
+ elif name == 'dependency':
+
+ if not self._pending:
+ raise ValueError, 'Dependency outside of step'
+
+ depended = self._extract( attrs, 'step' )
+ self._pending[ 'dependencies' ].append( depended )
+
+ else:
+ raise ValueError, 'Unknown element %s' % name
+
+ def characters( self, content ):
+
+ if self._pending is not None:
+ 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!'
+
+ deps = tuple( self._pending[ 'dependencies' ] )
+ self._pending[ 'dependencies' ] = deps
+
+ desc = ''.join( self._pending[ 'description' ] )
+ self._pending[ 'description' ] = desc
+
+ self._parsed.append( self._pending )
+ self._pending = None
+
+InitializeClass( _ImportStepRegistryParser )
+
+
+class _ExportStepRegistryParser(_HandlerBase):
+
+ security = ClassSecurityInfo()
+ security.declareObjectPrivate()
+ security.setDefaultAccess( 'deny' )
+
+ def __init__( self, encoding ):
+
+ self._encoding = encoding
+ self._started = False
+ self._pending = None
+ self._parsed = []
+
+ def startElement( self, name, attrs ):
+
+ if name == 'export-steps':
+
+ if self._started:
+ 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'
+
+ self._pending = dict( [ ( k, self._extract( attrs, k ) )
+ for k in attrs.keys() ] )
+
+ else:
+ raise ValueError, 'Unknown element %s' % name
+
+ def characters( self, content ):
+
+ if self._pending is not None:
+ 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!'
+
+ desc = ''.join( self._pending[ 'description' ] )
+ self._pending[ 'description' ] = desc
+
+ self._parsed.append( self._pending )
+ self._pending = None
+
+InitializeClass( _ExportStepRegistryParser )
+
+
class BaseStepRegistry( Implicit ):
security = ClassSecurityInfo()
@@ -581,189 +767,3 @@
_profile_registry = ProfileRegistry()
-#
-# XML parser
-#
-
-class _HandlerBase(ContentHandler):
-
- _MARKER = object()
-
- def _extract(self, attrs, key):
- result = attrs.get(key, self._MARKER)
-
- if result is self._MARKER:
- return None
-
- return self._encode(result)
-
- def _encode(self, content):
- if self._encoding is None:
- return content
-
- return content.encode(self._encoding)
-
-
-class _ImportStepRegistryParser(_HandlerBase):
-
- security = ClassSecurityInfo()
- security.declareObjectPrivate()
- security.setDefaultAccess( 'deny' )
-
- def __init__( self, encoding ):
-
- self._encoding = encoding
- self._started = False
- self._pending = None
- self._parsed = []
-
- def startElement( self, name, attrs ):
-
- if name == 'import-steps':
-
- if self._started:
- 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'
-
- self._pending = dict( [ ( k, self._extract( attrs, k ) )
- for k in attrs.keys() ] )
-
- self._pending[ 'dependencies' ] = []
-
- elif name == 'dependency':
-
- if not self._pending:
- raise ValueError, 'Dependency outside of step'
-
- depended = self._extract( attrs, 'step' )
- self._pending[ 'dependencies' ].append( depended )
-
- else:
- raise ValueError, 'Unknown element %s' % name
-
- def characters( self, content ):
-
- if self._pending is not None:
- 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!'
-
- deps = tuple( self._pending[ 'dependencies' ] )
- self._pending[ 'dependencies' ] = deps
-
- desc = ''.join( self._pending[ 'description' ] )
- self._pending[ 'description' ] = desc
-
- self._parsed.append( self._pending )
- self._pending = None
-
-InitializeClass( _ImportStepRegistryParser )
-
-
-class _ExportStepRegistryParser(_HandlerBase):
-
- security = ClassSecurityInfo()
- security.declareObjectPrivate()
- security.setDefaultAccess( 'deny' )
-
- def __init__( self, encoding ):
-
- self._encoding = encoding
- self._started = False
- self._pending = None
- self._parsed = []
-
- def startElement( self, name, attrs ):
-
- if name == 'export-steps':
-
- if self._started:
- 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'
-
- self._pending = dict( [ ( k, self._extract( attrs, k ) )
- for k in attrs.keys() ] )
-
- else:
- raise ValueError, 'Unknown element %s' % name
-
- def characters( self, content ):
-
- if self._pending is not None:
- 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!'
-
- desc = ''.join( self._pending[ 'description' ] )
- self._pending[ 'description' ] = desc
-
- self._parsed.append( self._pending )
- self._pending = None
-
-InitializeClass( _ExportStepRegistryParser )
-
-
-class _ToolsetParser(_HandlerBase):
-
- security = ClassSecurityInfo()
- security.declareObjectPrivate()
- security.setDefaultAccess( 'deny' )
-
- def __init__( self, encoding ):
-
- self._encoding = encoding
- self._required = {}
- self._forbidden = []
-
- def startElement( self, name, attrs ):
-
- if name == 'tool-setup':
- pass
-
- elif name == 'forbidden':
-
- tool_id = self._extract( attrs, 'tool_id' )
-
- if tool_id not in self._forbidden:
- 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
-
- else:
- raise ValueError, 'Unknown element %s' % name
-
-InitializeClass( _ToolsetParser )
More information about the Checkins
mailing list