[Checkins] SVN: Products.DCWorkflow/trunk/Products/DCWorkflow/ code cleanup:
Yvo Schubbe
cvs-admin at zope.org
Tue Apr 24 10:37:07 UTC 2012
Log message for revision 125269:
code cleanup:
- replaced has_key
- replaced oldstyle errors
- PEP 8
Changed:
U Products.DCWorkflow/trunk/Products/DCWorkflow/ContainerTab.py
U Products.DCWorkflow/trunk/Products/DCWorkflow/DCWorkflow.py
U Products.DCWorkflow/trunk/Products/DCWorkflow/Expression.py
U Products.DCWorkflow/trunk/Products/DCWorkflow/Guard.py
U Products.DCWorkflow/trunk/Products/DCWorkflow/Scripts.py
U Products.DCWorkflow/trunk/Products/DCWorkflow/States.py
U Products.DCWorkflow/trunk/Products/DCWorkflow/Transitions.py
U Products.DCWorkflow/trunk/Products/DCWorkflow/WorkflowUIMixin.py
U Products.DCWorkflow/trunk/Products/DCWorkflow/Worklists.py
U Products.DCWorkflow/trunk/Products/DCWorkflow/exportimport.py
U Products.DCWorkflow/trunk/Products/DCWorkflow/utils.py
-=-
Modified: Products.DCWorkflow/trunk/Products/DCWorkflow/ContainerTab.py
===================================================================
--- Products.DCWorkflow/trunk/Products/DCWorkflow/ContainerTab.py 2012-04-24 10:36:45 UTC (rev 125268)
+++ Products.DCWorkflow/trunk/Products/DCWorkflow/ContainerTab.py 2012-04-24 10:37:03 UTC (rev 125269)
@@ -1,14 +1,14 @@
##############################################################################
#
# Copyright (c) 2001 Zope Foundation and Contributors.
-#
+#
# This software is subject to the provisions of the Zope Public License,
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE.
-#
+#
##############################################################################
""" A convenient base class for representing a container as a management tab.
"""
@@ -51,27 +51,27 @@
def _checkId(self, id, allow_dup=0):
if not allow_dup:
- if self._mapping.has_key(id):
+ if id in self._mapping:
raise BadRequest('The id "%s" is already in use.' % id)
return Folder._checkId(self, id, allow_dup)
def _getOb(self, name, default=_marker):
mapping = self._mapping
- if mapping.has_key(name):
+ if name in mapping:
res = mapping[name]
if hasattr(res, '__of__'):
res = res.__of__(self)
return res
else:
if default is _marker:
- raise KeyError, name
+ raise KeyError(name)
return default
def __getattr__(self, name):
ob = self._mapping.get(name, None)
if ob is not None:
return ob
- raise AttributeError, name
+ raise AttributeError(name)
def _setOb(self, name, value):
mapping = self._mapping
@@ -84,13 +84,13 @@
self._mapping = mapping # Trigger persistence.
def get(self, name, default=None):
- if self._mapping.has_key(name):
+ if name in self._mapping:
return self[name]
else:
return default
def has_key(self, key):
- return self._mapping.has_key(key)
+ return key in self._mapping
def objectIds(self, spec=None):
# spec is not important for now...
Modified: Products.DCWorkflow/trunk/Products/DCWorkflow/DCWorkflow.py
===================================================================
--- Products.DCWorkflow/trunk/Products/DCWorkflow/DCWorkflow.py 2012-04-24 10:36:45 UTC (rev 125268)
+++ Products.DCWorkflow/trunk/Products/DCWorkflow/DCWorkflow.py 2012-04-24 10:37:03 UTC (rev 125269)
@@ -45,7 +45,7 @@
def checkId(id):
res = bad_id(id)
if res != -1 and res is not None:
- raise ValueError, 'Illegal ID'
+ raise ValueError('Illegal ID')
return 1
@@ -88,8 +88,7 @@
{'label': 'Worklists', 'action': 'worklists/manage_main'},
{'label': 'Scripts', 'action': 'scripts/manage_main'},
{'label': 'Permissions', 'action': 'manage_permissions'},
- {'label': 'Groups', 'action': 'manage_groups'},
- )
+ {'label': 'Groups', 'action': 'manage_groups'})
security = ClassSecurityInfo()
security.declareObjectProtected(ManagePortal)
@@ -155,7 +154,7 @@
status = self._getStatusOf(ob)
for id, vdef in self.variables.items():
if vdef.for_catalog:
- if status.has_key(id):
+ if id in status:
value = status[id]
# Not set yet. Use a default.
@@ -195,7 +194,7 @@
'name': tdef.actbox_name % info,
'url': tdef.actbox_url % info,
'icon': tdef.actbox_icon % info,
- 'permissions': (), # Predetermined.
+ 'permissions': (), # Predetermined.
'category': tdef.actbox_category,
'transition': tdef}))
res.sort()
@@ -234,7 +233,7 @@
'name': qdef.actbox_name % fmt_data,
'url': qdef.actbox_url % fmt_data,
'icon': qdef.actbox_icon % fmt_data,
- 'permissions': (), # Predetermined.
+ 'permissions': (), # Predetermined.
'category': qdef.actbox_category}))
fmt_data._pop()
res.sort()
@@ -303,7 +302,7 @@
getSecurityManager(), self, ob):
return default
status = self._getStatusOf(ob)
- if status is not None and status.has_key(name):
+ if status is not None and name in status:
value = status[name]
# Not set yet. Use a default.
@@ -332,7 +331,7 @@
"""
try:
self._changeStateOf(ob, None)
- except ( ObjectDeleted, ObjectMoved ):
+ except (ObjectDeleted, ObjectMoved):
# Swallow.
pass
@@ -459,7 +458,8 @@
raise WorkflowException(msg)
# Fire "before" event
- notify(BeforeTransitionEvent(ob, self, old_sdef, new_sdef, tdef, former_status, kwargs))
+ notify(BeforeTransitionEvent(ob, self, old_sdef, new_sdef, tdef,
+ former_status, kwargs))
# Execute the "before" script.
if tdef is not None and tdef.script_name:
@@ -475,20 +475,23 @@
# Update variables.
state_values = new_sdef.var_values
- if state_values is None: state_values = {}
+ if state_values is None:
+ state_values = {}
tdef_exprs = None
- if tdef is not None: tdef_exprs = tdef.var_exprs
- if tdef_exprs is None: tdef_exprs = {}
+ if tdef is not None:
+ tdef_exprs = tdef.var_exprs
+ if tdef_exprs is None:
+ tdef_exprs = {}
status = {}
for id, vdef in self.variables.items():
if not vdef.for_status:
continue
expr = None
- if state_values.has_key(id):
+ if id in state_values:
value = state_values[id]
- elif tdef_exprs.has_key(id):
+ elif id in tdef_exprs:
expr = tdef_exprs[id]
- elif not vdef.update_always and former_status.has_key(id):
+ elif not vdef.update_always and id in former_status:
# Preserve former value
value = former_status[id]
else:
@@ -525,7 +528,8 @@
script(sci) # May throw an exception.
# Fire "after" event
- notify(AfterTransitionEvent(ob, self, old_sdef, new_sdef, tdef, status, kwargs))
+ notify(AfterTransitionEvent(ob, self, old_sdef, new_sdef, tdef, status,
+ kwargs))
# Return the new state object.
if moved_exc is not None:
Modified: Products.DCWorkflow/trunk/Products/DCWorkflow/Expression.py
===================================================================
--- Products.DCWorkflow/trunk/Products/DCWorkflow/Expression.py 2012-04-24 10:36:45 UTC (rev 125268)
+++ Products.DCWorkflow/trunk/Products/DCWorkflow/Expression.py 2012-04-24 10:37:03 UTC (rev 125269)
@@ -1,14 +1,14 @@
##############################################################################
#
# Copyright (c) 2001 Zope Foundation and Contributors.
-#
+#
# This software is subject to the provisions of the Zope Public License,
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE.
-#
+#
##############################################################################
""" Expressions in a web-configurable workflow.
"""
@@ -19,6 +19,7 @@
from Acquisition import aq_parent
from App.class_init import InitializeClass
from DateTime.DateTime import DateTime
+from MultiMapping import MultiMapping
from Products.PageTemplates.Expressions import getEngine
from Products.PageTemplates.Expressions import SecureModuleImporter
@@ -28,10 +29,8 @@
from Products.CMFCore.WorkflowCore import ObjectMoved
-# We don't import SafeMapping from Products.PageTemplates.TALES
-# because it's deprecated in Zope 2.10
-from MultiMapping import MultiMapping
class SafeMapping(MultiMapping):
+
"""Mapping with security declarations and limited method exposure.
Since it subclasses MultiMapping, this class can be used to wrap
@@ -45,7 +44,8 @@
_pop = MultiMapping.pop
-class StateChangeInfo:
+class StateChangeInfo(object):
+
'''
Provides information for expressions and scripts.
'''
@@ -83,7 +83,7 @@
def __getitem__(self, name):
if name[:1] != '_' and hasattr(self, name):
return getattr(self, name)
- raise KeyError, name
+ raise KeyError(name)
def getHistory(self):
wf = self.workflow
@@ -126,7 +126,7 @@
'folder': container,
'nothing': None,
'root': ob.getPhysicalRoot(),
- 'request': getattr( ob, 'REQUEST', None ),
+ 'request': getattr(ob, 'REQUEST', None),
'modules': SecureModuleImporter,
'user': getSecurityManager().getUser(),
'state_change': sci,
Modified: Products.DCWorkflow/trunk/Products/DCWorkflow/Guard.py
===================================================================
--- Products.DCWorkflow/trunk/Products/DCWorkflow/Guard.py 2012-04-24 10:36:45 UTC (rev 125268)
+++ Products.DCWorkflow/trunk/Products/DCWorkflow/Guard.py 2012-04-24 10:37:03 UTC (rev 125269)
@@ -30,7 +30,8 @@
from Products.DCWorkflow.utils import _dtmldir
-class Guard (Persistent, Explicit):
+class Guard(Persistent, Explicit):
+
permissions = ()
roles = ()
groups = ()
@@ -68,10 +69,10 @@
if self.groups:
# Require at least one of the specified groups.
u = sm.getUser()
- b = aq_base( u )
- if hasattr( b, 'getGroupsInContext' ):
- u_groups = u.getGroupsInContext( ob )
- elif hasattr( b, 'getGroups' ):
+ b = aq_base(u)
+ if hasattr(b, 'getGroupsInContext'):
+ u_groups = u.getGroupsInContext(ob)
+ elif hasattr(b, 'getGroups'):
u_groups = u.getGroups()
else:
u_groups = ()
Modified: Products.DCWorkflow/trunk/Products/DCWorkflow/Scripts.py
===================================================================
--- Products.DCWorkflow/trunk/Products/DCWorkflow/Scripts.py 2012-04-24 10:36:45 UTC (rev 125268)
+++ Products.DCWorkflow/trunk/Products/DCWorkflow/Scripts.py 2012-04-24 10:37:03 UTC (rev 125269)
@@ -21,7 +21,7 @@
from Products.DCWorkflow.permissions import ManagePortal
-class Scripts (ContainerTab):
+class Scripts(ContainerTab):
"""A container for workflow scripts"""
meta_type = 'Workflow Scripts'
Modified: Products.DCWorkflow/trunk/Products/DCWorkflow/States.py
===================================================================
--- Products.DCWorkflow/trunk/Products/DCWorkflow/States.py 2012-04-24 10:36:45 UTC (rev 125268)
+++ Products.DCWorkflow/trunk/Products/DCWorkflow/States.py 2012-04-24 10:37:03 UTC (rev 125269)
@@ -29,6 +29,7 @@
class StateDefinition(SimpleItem):
+
"""State definition"""
meta_type = 'Workflow State'
@@ -37,8 +38,7 @@
{'label': 'Properties', 'action': 'manage_properties'},
{'label': 'Permissions', 'action': 'manage_permissions'},
{'label': 'Groups', 'action': 'manage_groups'},
- {'label': 'Variables', 'action': 'manage_variables'},
- )
+ {'label': 'Variables', 'action': 'manage_variables'})
title = ''
description = ''
@@ -60,8 +60,8 @@
return aq_parent(aq_inner(aq_parent(aq_inner(self))))
def getTransitions(self):
- return filter(self.getWorkflow().transitions.has_key,
- self.transitions)
+ return [ t for t in self.transitions
+ if t in self.getWorkflow().transitions ]
def getTransitionTitle(self, tid):
t = self.getWorkflow().transitions.get(tid, None)
@@ -88,13 +88,13 @@
if self.permission_roles:
roles = self.permission_roles.get(p, None)
if roles is None:
- return {'acquired':1, 'roles':[]}
+ return {'acquired': 1, 'roles': []}
else:
if isinstance(roles, tuple):
acq = 0
else:
acq = 1
- return {'acquired':acq, 'roles':list(roles)}
+ return {'acquired': acq, 'roles': list(roles)}
def getGroupInfo(self, group):
"""Returns the list of roles to be assigned to a group.
@@ -112,7 +112,8 @@
manage_tabs_message=manage_tabs_message,
)
- def setProperties(self, title='', transitions=(), REQUEST=None, description=''):
+ def setProperties(self, title='', transitions=(), REQUEST=None,
+ description=''):
"""Set the properties for this State."""
self.title = str(title)
self.description = str(description)
@@ -120,7 +121,6 @@
if REQUEST is not None:
return self.manage_properties(REQUEST, 'Properties changed.')
-
_variables_form = DTMLFile('state_variables', _dtmldir)
def manage_variables(self, REQUEST, manage_tabs_message=None):
@@ -147,11 +147,11 @@
return wf_vars
ret = []
for vid in wf_vars:
- if not self.var_values.has_key(vid):
+ if not vid in self.var_values:
ret.append(vid)
return ret
- def addVariable(self,id,value,REQUEST=None):
+ def addVariable(self, id, value, REQUEST=None):
"""Add a WorkflowVariable to State."""
if self.var_values is None:
self.var_values = PersistentMapping()
@@ -161,11 +161,11 @@
if REQUEST is not None:
return self.manage_variables(REQUEST, 'Variable added.')
- def deleteVariables(self,ids=[],REQUEST=None):
+ def deleteVariables(self, ids=[], REQUEST=None):
"""Delete a WorkflowVariable from State."""
vv = self.var_values
for id in ids:
- if vv.has_key(id):
+ if id in vv:
del vv[id]
if REQUEST is not None:
@@ -184,8 +184,6 @@
vv[id] = str(REQUEST[fname])
return self.manage_variables(REQUEST, 'Variables changed.')
-
-
_permissions_form = DTMLFile('state_permissions', _dtmldir)
def manage_permissions(self, REQUEST, manage_tabs_message=None):
@@ -254,6 +252,7 @@
class States(ContainerTab):
+
"""A container for state definitions"""
meta_type = 'Workflow States'
@@ -261,10 +260,9 @@
security = ClassSecurityInfo()
security.declareObjectProtected(ManagePortal)
- all_meta_types = ({'name':StateDefinition.meta_type,
- 'action':'addState',
- 'permission': ManagePortal,
- },)
+ all_meta_types = ({'name': StateDefinition.meta_type,
+ 'action': 'addState',
+ 'permission': ManagePortal},)
_manage_states = DTMLFile('states', _dtmldir)
@@ -297,7 +295,7 @@
'''
if not id:
if len(ids) != 1:
- raise ValueError, 'One and only one state must be selected'
+ raise ValueError('One and only one state must be selected')
id = ids[0]
id = str(id)
aq_parent(aq_inner(self)).initial_state = id
Modified: Products.DCWorkflow/trunk/Products/DCWorkflow/Transitions.py
===================================================================
--- Products.DCWorkflow/trunk/Products/DCWorkflow/Transitions.py 2012-04-24 10:36:45 UTC (rev 125268)
+++ Products.DCWorkflow/trunk/Products/DCWorkflow/Transitions.py 2012-04-24 10:37:03 UTC (rev 125269)
@@ -31,7 +31,8 @@
TRIGGER_USER_ACTION = 1
-class TransitionDefinition (SimpleItem):
+class TransitionDefinition(SimpleItem):
+
"""Transition definition"""
meta_type = 'Workflow Transition'
@@ -54,8 +55,7 @@
manage_options = (
{'label': 'Properties', 'action': 'manage_properties'},
- {'label': 'Variables', 'action': 'manage_variables'},
- )
+ {'label': 'Variables', 'action': 'manage_variables'})
def __init__(self, id):
self.id = id
@@ -152,7 +152,7 @@
else:
ret = []
for key in ve.keys():
- ret.append((key,self.getVarExprText(key)))
+ ret.append((key, self.getVarExprText(key)))
return ret
def getWorkflowVariables(self):
@@ -164,7 +164,7 @@
return wf_vars
ret = []
for vid in wf_vars:
- if not self.var_exprs.has_key(vid):
+ if not vid in self.var_exprs:
ret.append(vid)
return ret
@@ -183,12 +183,12 @@
if REQUEST is not None:
return self.manage_variables(REQUEST, 'Variable added.')
- def deleteVariables(self,ids=[],REQUEST=None):
+ def deleteVariables(self, ids=[], REQUEST=None):
''' delete a WorkflowVariable from State
'''
ve = self.var_exprs
for id in ids:
- if ve.has_key(id):
+ if id in ve:
del ve[id]
if REQUEST is not None:
@@ -217,7 +217,8 @@
InitializeClass(TransitionDefinition)
-class Transitions (ContainerTab):
+class Transitions(ContainerTab):
+
"""A container for transition definitions"""
meta_type = 'Workflow Transitions'
@@ -225,10 +226,9 @@
security = ClassSecurityInfo()
security.declareObjectProtected(ManagePortal)
- all_meta_types = ({'name':TransitionDefinition.meta_type,
- 'action':'addTransition',
- 'permission': ManagePortal,
- },)
+ all_meta_types = ({'name': TransitionDefinition.meta_type,
+ 'action': 'addTransition',
+ 'permission': ManagePortal},)
_manage_transitions = DTMLFile('transitions', _dtmldir)
Modified: Products.DCWorkflow/trunk/Products/DCWorkflow/WorkflowUIMixin.py
===================================================================
--- Products.DCWorkflow/trunk/Products/DCWorkflow/WorkflowUIMixin.py 2012-04-24 10:36:45 UTC (rev 125268)
+++ Products.DCWorkflow/trunk/Products/DCWorkflow/WorkflowUIMixin.py 2012-04-24 10:37:03 UTC (rev 125269)
@@ -1,14 +1,14 @@
##############################################################################
#
# Copyright (c) 2001 Zope Foundation and Contributors.
-#
+#
# This software is subject to the provisions of the Zope Public License,
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE.
-#
+#
##############################################################################
""" Web-configurable workflow UI.
"""
@@ -27,7 +27,8 @@
from Products.DCWorkflow.utils import _dtmldir
-class WorkflowUIMixin:
+class WorkflowUIMixin(object):
+
'''
'''
@@ -39,7 +40,7 @@
security.declareProtected(ManagePortal, 'setProperties')
@postonly
- def setProperties(self, title, manager_bypass=0, props=None,
+ def setProperties(self, title, manager_bypass=0, props=None,
REQUEST=None, description=''):
"""Sets basic properties.
"""
@@ -72,9 +73,9 @@
"""Adds to the list of permissions to manage.
"""
if p in self.permissions:
- raise ValueError, 'Already a managed permission: ' + p
+ raise ValueError('Already a managed permission: ' + p)
if REQUEST is not None and p not in self.getPossiblePermissions():
- raise ValueError, 'Not a valid permission name:' + p
+ raise ValueError('Not a valid permission name:' + p)
self.permissions = self.permissions + (p,)
if REQUEST is not None:
return self.manage_permissions(
@@ -111,7 +112,7 @@
def getAvailableGroups(self):
"""Returns a list of available group names.
"""
- gf = aq_get( self, '__allow_groups__', None, 1 )
+ gf = aq_get(self, '__allow_groups__', None, 1)
if gf is None:
return ()
try:
Modified: Products.DCWorkflow/trunk/Products/DCWorkflow/Worklists.py
===================================================================
--- Products.DCWorkflow/trunk/Products/DCWorkflow/Worklists.py 2012-04-24 10:36:45 UTC (rev 125268)
+++ Products.DCWorkflow/trunk/Products/DCWorkflow/Worklists.py 2012-04-24 10:37:03 UTC (rev 125269)
@@ -37,6 +37,7 @@
class WorklistDefinition(SimpleItem):
+
"""Worklist definiton"""
meta_type = 'Worklist'
@@ -52,9 +53,7 @@
actbox_category = 'global'
guard = None
- manage_options = (
- {'label': 'Properties', 'action': 'manage_properties'},
- )
+ manage_options = ({'label': 'Properties', 'action': 'manage_properties'},)
def __init__(self, id):
self.id = id
@@ -141,7 +140,7 @@
self.var_matches[key] = tuple(v)
else:
- if self.var_matches and self.var_matches.has_key(key):
+ if self.var_matches and key in self.var_matches:
del self.var_matches[key]
self.actbox_name = str(actbox_name)
self.actbox_url = str(actbox_url)
@@ -189,6 +188,7 @@
class Worklists(ContainerTab):
+
"""A container for worklist definitions"""
meta_type = 'Worklists'
@@ -196,10 +196,9 @@
security = ClassSecurityInfo()
security.declareObjectProtected(ManagePortal)
- all_meta_types = ({'name':WorklistDefinition.meta_type,
- 'action':'addWorklist',
- 'permission': ManagePortal,
- },)
+ all_meta_types = ({'name': WorklistDefinition.meta_type,
+ 'action': 'addWorklist',
+ 'permission': ManagePortal},)
_manage_worklists = DTMLFile('worklists', _dtmldir)
Modified: Products.DCWorkflow/trunk/Products/DCWorkflow/exportimport.py
===================================================================
--- Products.DCWorkflow/trunk/Products/DCWorkflow/exportimport.py 2012-04-24 10:36:45 UTC (rev 125268)
+++ Products.DCWorkflow/trunk/Products/DCWorkflow/exportimport.py 2012-04-24 10:37:03 UTC (rev 125269)
@@ -32,7 +32,7 @@
from Products.GenericSetup.interfaces import ISetupEnviron
from Products.GenericSetup.utils import BodyAdapterBase
-TRIGGER_TYPES = ( 'AUTOMATIC', 'USER' )
+TRIGGER_TYPES = ('AUTOMATIC', 'USER')
_FILENAME = 'workflows.xml'
@@ -55,36 +55,35 @@
encoding = 'utf-8'
wfdc = WorkflowDefinitionConfigurator(self.context)
- ( workflow_id
- , title
- , state_variable
- , initial_state
- , states
- , transitions
- , variables
- , worklists
- , permissions
- , scripts
- , description
- , manager_bypass
- , creation_guard
+ (_workflow_id,
+ title,
+ state_variable,
+ initial_state,
+ states,
+ transitions,
+ variables,
+ worklists,
+ permissions,
+ scripts,
+ description,
+ manager_bypass,
+ creation_guard
) = wfdc.parseWorkflowXML(body, encoding)
- _initDCWorkflow( self.context
- , title
- , description
- , manager_bypass
- , creation_guard
- , state_variable
- , initial_state
- , states
- , transitions
- , variables
- , worklists
- , permissions
- , scripts
- , self.environ
- )
+ _initDCWorkflow(self.context,
+ title,
+ description,
+ manager_bypass,
+ creation_guard,
+ state_variable,
+ initial_state,
+ states,
+ transitions,
+ variables,
+ worklists,
+ permissions,
+ scripts,
+ self.environ)
body = property(_exportBody, _importBody)
@@ -93,7 +92,7 @@
suffix = '/definition.xml'
-class WorkflowDefinitionConfigurator( Implicit ):
+class WorkflowDefinitionConfigurator(Implicit):
""" Synthesize XML description of site's workflows.
"""
security = ClassSecurityInfo()
@@ -101,9 +100,8 @@
def __init__(self, obj):
self._obj = obj
- security.declareProtected( ManagePortal, 'getWorkflowInfo' )
- def getWorkflowInfo( self, workflow_id ):
-
+ security.declareProtected(ManagePortal, 'getWorkflowInfo')
+ def getWorkflowInfo(self, workflow_id):
""" Return a mapping describing a given workflow.
o Keys in the mappings:
@@ -122,81 +120,78 @@
"""
workflow = self._obj
- workflow_info = { 'id' : workflow_id
- , 'meta_type' : workflow.meta_type
- , 'title' : workflow.title_or_id()
- , 'description' : workflow.description
- }
+ workflow_info = {'id': workflow_id,
+ 'meta_type': workflow.meta_type,
+ 'title': workflow.title_or_id(),
+ 'description': workflow.description}
if workflow.meta_type == DCWorkflowDefinition.meta_type:
- self._extractDCWorkflowInfo( workflow, workflow_info )
+ self._extractDCWorkflowInfo(workflow, workflow_info)
return workflow_info
- security.declareProtected( ManagePortal, 'generateWorkflowXML' )
+ security.declareProtected(ManagePortal, 'generateWorkflowXML')
def generateWorkflowXML(self):
""" Pseudo API.
"""
return self._workflowConfig(workflow_id=self._obj.getId())\
.encode('utf-8')
- security.declareProtected( ManagePortal, 'getWorkflowScripts' )
+ security.declareProtected(ManagePortal, 'getWorkflowScripts')
def getWorkflowScripts(self):
""" Get workflow scripts information
"""
return self._extractScripts(self._obj)
- security.declareProtected( ManagePortal, 'parseWorkflowXML' )
- def parseWorkflowXML( self, xml, encoding='utf-8' ):
+ security.declareProtected(ManagePortal, 'parseWorkflowXML')
+ def parseWorkflowXML(self, xml, encoding='utf-8'):
""" Pseudo API.
"""
- dom = parseString( xml )
+ dom = parseString(xml)
- root = dom.getElementsByTagName( 'dc-workflow' )[ 0 ]
+ root = dom.getElementsByTagName('dc-workflow')[0]
- workflow_id = _getNodeAttribute( root, 'workflow_id', encoding )
- title = _getNodeAttribute( root, 'title', encoding )
+ workflow_id = _getNodeAttribute(root, 'workflow_id', encoding)
+ title = _getNodeAttribute(root, 'title', encoding)
try:
- description = _getNodeAttribute( root, 'description', encoding )
+ description = _getNodeAttribute(root, 'description', encoding)
except ValueError:
- # Don't fail on export files that do not have the description field!
+ # Don't fail on export files that do not have the description
+ # field!
description = ''
- manager_bypass = _queryNodeAttributeBoolean(root,'manager_bypass',False)
+ manager_bypass = _queryNodeAttributeBoolean(root, 'manager_bypass',
+ False)
creation_guard = _extractCreationGuard(root, encoding)
- state_variable = _getNodeAttribute( root, 'state_variable', encoding )
- initial_state = _getNodeAttribute( root, 'initial_state', encoding )
+ state_variable = _getNodeAttribute(root, 'state_variable', encoding)
+ initial_state = _getNodeAttribute(root, 'initial_state', encoding)
- states = _extractStateNodes( root, encoding )
- transitions = _extractTransitionNodes( root, encoding )
- variables = _extractVariableNodes( root, encoding )
- worklists = _extractWorklistNodes( root, encoding )
- permissions = _extractPermissionNodes( root, encoding )
- scripts = _extractScriptNodes( root, encoding )
+ states = _extractStateNodes(root, encoding)
+ transitions = _extractTransitionNodes(root, encoding)
+ variables = _extractVariableNodes(root, encoding)
+ worklists = _extractWorklistNodes(root, encoding)
+ permissions = _extractPermissionNodes(root, encoding)
+ scripts = _extractScriptNodes(root, encoding)
- return ( workflow_id
- , title
- , state_variable
- , initial_state
- , states
- , transitions
- , variables
- , worklists
- , permissions
- , scripts
- , description
- , manager_bypass
- , creation_guard
- )
+ return (workflow_id,
+ title,
+ state_variable,
+ initial_state,
+ states,
+ transitions,
+ variables,
+ worklists,
+ permissions,
+ scripts,
+ description,
+ manager_bypass,
+ creation_guard)
- security.declarePrivate( '_workflowConfig' )
- _workflowConfig = PageTemplateFile( 'wtcWorkflowExport.xml'
- , _xmldir
- , __name__='workflowConfig'
- )
+ security.declarePrivate('_workflowConfig')
+ _workflowConfig = PageTemplateFile('wtcWorkflowExport.xml', _xmldir,
+ __name__='workflowConfig')
- security.declarePrivate( '_extractDCWorkflowInfo' )
- def _extractDCWorkflowInfo( self, workflow, workflow_info ):
-
+ security.declarePrivate('_extractDCWorkflowInfo')
+ def _extractDCWorkflowInfo(self, workflow, workflow_info):
""" Append the information for a 'workflow' into 'workflow_info'
o 'workflow' must be a DCWorkflowDefinition instance.
@@ -209,7 +204,7 @@
'permissions' -- a list of names of permissions managed
by the workflow
-
+
'state_variable' -- the name of the workflow's "main"
state variable
@@ -231,17 +226,16 @@
'script_info' -- a list of mappings describing the scripts which
provide added business logic (see '_extractScripts').
"""
- workflow_info[ 'manager_bypass' ] = bool(workflow.manager_bypass)
- workflow_info[ 'creation_guard' ] = self._extractCreationGuard(workflow)
- workflow_info[ 'state_variable' ] = workflow.state_var
- workflow_info[ 'initial_state' ] = workflow.initial_state
- workflow_info[ 'permissions' ] = workflow.permissions
- workflow_info[ 'variable_info' ] = self._extractVariables( workflow )
- workflow_info[ 'state_info' ] = self._extractStates( workflow )
- workflow_info[ 'transition_info' ] = self._extractTransitions(
- workflow )
- workflow_info[ 'worklist_info' ] = self._extractWorklists( workflow )
- workflow_info[ 'script_info' ] = self._extractScripts( workflow )
+ workflow_info['manager_bypass'] = bool(workflow.manager_bypass)
+ workflow_info['creation_guard'] = self._extractCreationGuard(workflow)
+ workflow_info['state_variable'] = workflow.state_var
+ workflow_info['initial_state'] = workflow.initial_state
+ workflow_info['permissions'] = workflow.permissions
+ workflow_info['variable_info'] = self._extractVariables(workflow)
+ workflow_info['state_info'] = self._extractStates(workflow)
+ workflow_info['transition_info'] = self._extractTransitions(workflow)
+ workflow_info['worklist_info'] = self._extractWorklists(workflow)
+ workflow_info['script_info'] = self._extractScripts(workflow)
security.declarePrivate('_extractCreationGuard')
def _extractCreationGuard(self, workflow):
@@ -249,17 +243,15 @@
if 'creation_guard' is initialized or None
"""
guard = workflow.creation_guard
- if guard is not None :
- info = { 'guard_permissions' : guard.permissions
- , 'guard_roles' : guard.roles
- , 'guard_groups' : guard.groups
- , 'guard_expr' : guard.getExprText()
- }
+ if guard is not None:
+ info = {'guard_permissions': guard.permissions,
+ 'guard_roles': guard.roles,
+ 'guard_groups': guard.groups,
+ 'guard_expr': guard.getExprText()}
return info
- security.declarePrivate( '_extractVariables' )
- def _extractVariables( self, workflow ):
-
+ security.declarePrivate('_extractVariables')
+ def _extractVariables(self, workflow):
""" Return a sequence of mappings describing DCWorkflow variables.
o Keys for each mapping will include:
@@ -298,29 +290,27 @@
guard = v.getInfoGuard()
- default_type = _guessVariableType( v.default_value )
+ default_type = _guessVariableType(v.default_value)
- info = { 'id' : k
- , 'description' : v.description
- , 'for_catalog' : bool( v.for_catalog )
- , 'for_status' : bool( v.for_status )
- , 'update_always' : bool( v.update_always )
- , 'default_value' : v.default_value
- , 'default_type' : default_type
- , 'default_expr' : v.getDefaultExprText()
- , 'guard_permissions' : guard.permissions
- , 'guard_roles' : guard.roles
- , 'guard_groups' : guard.groups
- , 'guard_expr' : guard.getExprText()
- }
+ info = {'id': k,
+ 'description': v.description,
+ 'for_catalog': bool(v.for_catalog),
+ 'for_status': bool(v.for_status),
+ 'update_always': bool(v.update_always),
+ 'default_value': v.default_value,
+ 'default_type': default_type,
+ 'default_expr': v.getDefaultExprText(),
+ 'guard_permissions': guard.permissions,
+ 'guard_roles': guard.roles,
+ 'guard_groups': guard.groups,
+ 'guard_expr': guard.getExprText()}
- result.append( info )
+ result.append(info)
return result
- security.declarePrivate( '_extractStates' )
- def _extractStates( self, workflow ):
-
+ security.declarePrivate('_extractStates')
+ def _extractStates(self, workflow):
""" Return a sequence of mappings describing DCWorkflow states.
o Within the workflow mapping, each 'state_info' mapping has keys:
@@ -368,37 +358,34 @@
for k, v in items:
- groups = v.group_roles and list( v.group_roles.items() ) or []
+ groups = v.group_roles and list(v.group_roles.items()) or []
groups = [ x for x in groups if x[1] ]
groups.sort()
- variables = list( v.getVariableValues() )
+ variables = list(v.getVariableValues())
variables.sort()
v_info = []
for v_name, value in variables:
- v_info.append( { 'name' : v_name
- , 'type' :_guessVariableType( value )
- , 'value' : value
- } )
+ v_info.append({'name': v_name,
+ 'type': _guessVariableType(value),
+ 'value': value})
- info = { 'id' : k
- , 'title' : v.title
- , 'description' : v.description
- , 'transitions' : v.transitions
- , 'permissions' : self._extractStatePermissions( v )
- , 'groups' : groups
- , 'variables' : v_info
- }
+ info = {'id': k,
+ 'title': v.title,
+ 'description': v.description,
+ 'transitions': v.transitions,
+ 'permissions': self._extractStatePermissions(v),
+ 'groups': groups,
+ 'variables': v_info}
- result.append( info )
+ result.append(info)
return result
- security.declarePrivate( '_extractStatePermissions' )
- def _extractStatePermissions( self, state ):
-
+ security.declarePrivate('_extractStatePermissions')
+ def _extractStatePermissions(self, state):
""" Return a sequence of mappings for the permissions in a state.
o Each mapping has the keys:
@@ -417,18 +404,14 @@
items.sort()
for k, v in items:
+ result.append({'name': k,
+ 'roles': v,
+ 'acquired': not isinstance(v, tuple)})
- result.append( { 'name' : k
- , 'roles' : v
- , 'acquired' : not isinstance( v, tuple )
- } )
-
return result
-
- security.declarePrivate( '_extractTransitions' )
- def _extractTransitions( self, workflow ):
-
+ security.declarePrivate('_extractTransitions')
+ def _extractTransitions(self, workflow):
""" Return a sequence of mappings describing DCWorkflow transitions.
o Each mapping has the keys:
@@ -492,33 +475,31 @@
v_info = []
for v_name, expr in v.getVariableExprs():
- v_info.append( { 'name' : v_name, 'expr' : expr } )
+ v_info.append({'name': v_name, 'expr': expr})
- info = { 'id' : k
- , 'title' : v.title
- , 'description' : v.description
- , 'new_state_id' : v.new_state_id
- , 'trigger_type' : TRIGGER_TYPES[ v.trigger_type ]
- , 'script_name' : v.script_name
- , 'after_script_name' : v.after_script_name
- , 'actbox_name' : v.actbox_name
- , 'actbox_url' : v.actbox_url
- , 'actbox_icon' : v.actbox_icon
- , 'actbox_category' : v.actbox_category
- , 'variables' : v_info
- , 'guard_permissions' : guard.permissions
- , 'guard_roles' : guard.roles
- , 'guard_groups' : guard.groups
- , 'guard_expr' : guard.getExprText()
- }
+ info = {'id': k,
+ 'title': v.title,
+ 'description': v.description,
+ 'new_state_id': v.new_state_id,
+ 'trigger_type': TRIGGER_TYPES[v.trigger_type],
+ 'script_name': v.script_name,
+ 'after_script_name': v.after_script_name,
+ 'actbox_name': v.actbox_name,
+ 'actbox_url': v.actbox_url,
+ 'actbox_icon': v.actbox_icon,
+ 'actbox_category': v.actbox_category,
+ 'variables': v_info,
+ 'guard_permissions': guard.permissions,
+ 'guard_roles': guard.roles,
+ 'guard_groups': guard.groups,
+ 'guard_expr': guard.getExprText()}
- result.append( info )
+ result.append(info)
return result
- security.declarePrivate( '_extractWorklists' )
- def _extractWorklists( self, workflow ):
-
+ security.declarePrivate('_extractWorklists')
+ def _extractWorklists(self, workflow):
""" Return a sequence of mappings describing DCWorkflow transitions.
o Each mapping has the keys:
@@ -538,7 +519,7 @@
'actbox_url' -- the URL of the "action" corresponding to the
worklist
- 'actbox_icon' -- the icon URL of the "action" corresponding to
+ 'actbox_icon' -- the icon URL of the "action" corresponding to
the worklist
'actbox_category' -- the category of the "action" corresponding
@@ -562,30 +543,28 @@
guard = v.getGuard()
- var_match = [ ( id, v.getVarMatchText( id ) )
- for id in v.getVarMatchKeys() ]
+ var_match = [ (id, v.getVarMatchText(id))
+ for id in v.getVarMatchKeys() ]
- info = { 'id' : k
- , 'title' : v.title
- , 'description' : v.description
- , 'var_match' : var_match
- , 'actbox_name' : v.actbox_name
- , 'actbox_url' : v.actbox_url
- , 'actbox_icon' : v.actbox_icon
- , 'actbox_category' : v.actbox_category
- , 'guard_permissions' : guard.permissions
- , 'guard_roles' : guard.roles
- , 'guard_groups' : guard.groups
- , 'guard_expr' : guard.getExprText()
- }
+ info = {'id': k,
+ 'title': v.title,
+ 'description': v.description,
+ 'var_match': var_match,
+ 'actbox_name': v.actbox_name,
+ 'actbox_url': v.actbox_url,
+ 'actbox_icon': v.actbox_icon,
+ 'actbox_category': v.actbox_category,
+ 'guard_permissions': guard.permissions,
+ 'guard_roles': guard.roles,
+ 'guard_groups': guard.groups,
+ 'guard_expr': guard.getExprText()}
- result.append( info )
+ result.append(info)
return result
- security.declarePrivate( '_extractScripts' )
- def _extractScripts( self, workflow ):
-
+ security.declarePrivate('_extractScripts')
+ def _extractScripts(self, workflow):
""" Return a sequence of mappings describing DCWorkflow scripts.
o Each mapping has the keys:
@@ -613,7 +592,7 @@
for k, v in items:
- filename = _getScriptFilename( workflow.getId(), k, v.meta_type )
+ filename = _getScriptFilename(workflow.getId(), k, v.meta_type)
module = ''
function = ''
@@ -621,342 +600,301 @@
module = v.module()
function = v.function()
- info = { 'id' : k
- , 'meta_type' : v.meta_type
- , 'module' : module
- , 'function' : function
- , 'filename' : filename
- }
+ info = {'id': k,
+ 'meta_type': v.meta_type,
+ 'module': module,
+ 'function': function,
+ 'filename': filename}
- result.append( info )
+ result.append(info)
return result
-InitializeClass( WorkflowDefinitionConfigurator )
+InitializeClass(WorkflowDefinitionConfigurator)
-def _getScriptFilename( workflow_id, script_id, meta_type ):
-
+def _getScriptFilename(workflow_id, script_id, meta_type):
""" Return the name of the file which holds the script.
"""
- wf_dir = workflow_id.replace( ' ', '_' )
+ wf_dir = workflow_id.replace(' ', '_')
suffix = _METATYPE_SUFFIXES.get(meta_type, None)
if suffix is None:
return ''
- return 'workflows/%s/scripts/%s.%s' % ( wf_dir, script_id, suffix )
+ return 'workflows/%s/scripts/%s.%s' % (wf_dir, script_id, suffix)
-def _extractCreationGuard(root, encoding='utf-8') :
+def _extractCreationGuard(root, encoding='utf-8'):
icc = root.getElementsByTagName('instance-creation-conditions')
assert len(icc) <= 1
- if icc :
+ if icc:
parent = icc[0]
return _extractGuardNode(parent, encoding)
- else :
+ else:
return None
-def _extractStateNodes( root, encoding='utf-8' ):
-
+def _extractStateNodes(root, encoding='utf-8'):
result = []
- for s_node in root.getElementsByTagName( 'state' ):
+ for s_node in root.getElementsByTagName('state'):
+ info = {'state_id': _getNodeAttribute(s_node, 'state_id', encoding),
+ 'title': _getNodeAttribute(s_node, 'title', encoding),
+ 'description': _extractDescriptionNode(s_node, encoding)}
- info = { 'state_id' : _getNodeAttribute( s_node, 'state_id', encoding )
- , 'title' : _getNodeAttribute( s_node, 'title', encoding )
- , 'description' : _extractDescriptionNode( s_node, encoding )
- }
+ info['transitions'] = [ _getNodeAttribute(x, 'transition_id', encoding)
+ for x in s_node.getElementsByTagName(
+ 'exit-transition') ]
- info[ 'transitions' ] = [ _getNodeAttribute( x, 'transition_id'
- , encoding )
- for x in s_node.getElementsByTagName(
- 'exit-transition' ) ]
+ info['permissions'] = permission_map = {}
- info[ 'permissions' ] = permission_map = {}
+ for p_map in s_node.getElementsByTagName('permission-map'):
- for p_map in s_node.getElementsByTagName( 'permission-map' ):
+ name = _getNodeAttribute(p_map, 'name', encoding)
+ acquired = _queryNodeAttributeBoolean(p_map, 'acquired', False)
- name = _getNodeAttribute( p_map, 'name', encoding )
- acquired = _queryNodeAttributeBoolean( p_map, 'acquired', False )
+ roles = [ _coalesceTextNodeChildren(x, encoding)
+ for x in p_map.getElementsByTagName('permission-role') ]
- roles = [ _coalesceTextNodeChildren( x, encoding )
- for x in p_map.getElementsByTagName(
- 'permission-role' ) ]
-
if not acquired:
- roles = tuple( roles )
+ roles = tuple(roles)
- permission_map[ name ] = roles
+ permission_map[name] = roles
- info[ 'groups' ] = group_map = []
+ info['groups'] = group_map = []
- for g_map in s_node.getElementsByTagName( 'group-map' ):
+ for g_map in s_node.getElementsByTagName('group-map'):
- name = _getNodeAttribute( g_map, 'name', encoding )
+ name = _getNodeAttribute(g_map, 'name', encoding)
- roles = [ _coalesceTextNodeChildren( x, encoding )
- for x in g_map.getElementsByTagName(
- 'group-role' ) ]
+ roles = [ _coalesceTextNodeChildren(x, encoding)
+ for x in g_map.getElementsByTagName('group-role') ]
- group_map.append( ( name, tuple( roles ) ) )
+ group_map.append((name, tuple(roles)))
- info[ 'variables' ] = var_map = {}
+ info['variables'] = var_map = {}
- for assignment in s_node.getElementsByTagName( 'assignment' ):
+ for assignment in s_node.getElementsByTagName('assignment'):
- name = _getNodeAttribute( assignment, 'name', encoding )
- type_id = _getNodeAttribute( assignment, 'type', encoding )
- value = _coalesceTextNodeChildren( assignment, encoding )
+ name = _getNodeAttribute(assignment, 'name', encoding)
+ type_id = _getNodeAttribute(assignment, 'type', encoding)
+ value = _coalesceTextNodeChildren(assignment, encoding)
- var_map[ name ] = { 'name' : name
- , 'type' : type_id
- , 'value' : value
- }
+ var_map[name] = {'name': name, 'type': type_id, 'value': value}
- result.append( info )
+ result.append(info)
return result
-def _extractTransitionNodes( root, encoding='utf-8' ):
-
+def _extractTransitionNodes(root, encoding='utf-8'):
result = []
- for t_node in root.getElementsByTagName( 'transition' ):
+ for t_node in root.getElementsByTagName('transition'):
- info = { 'transition_id' : _getNodeAttribute( t_node, 'transition_id'
- , encoding )
- , 'title' : _getNodeAttribute( t_node, 'title', encoding )
- , 'description' : _extractDescriptionNode( t_node, encoding )
- , 'new_state' : _getNodeAttribute( t_node, 'new_state'
- , encoding )
- , 'trigger' : _getNodeAttribute( t_node, 'trigger', encoding )
- , 'before_script' : _getNodeAttribute( t_node, 'before_script'
- , encoding )
- , 'after_script' : _getNodeAttribute( t_node, 'after_script'
- , encoding )
- , 'action' : _extractActionNode( t_node, encoding )
- , 'guard' : _extractGuardNode( t_node, encoding )
- }
+ info = {'transition_id': _getNodeAttribute(t_node, 'transition_id',
+ encoding),
+ 'title': _getNodeAttribute(t_node, 'title', encoding),
+ 'description': _extractDescriptionNode(t_node, encoding),
+ 'new_state': _getNodeAttribute(t_node, 'new_state', encoding),
+ 'trigger': _getNodeAttribute(t_node, 'trigger', encoding),
+ 'before_script': _getNodeAttribute(t_node, 'before_script',
+ encoding),
+ 'after_script': _getNodeAttribute(t_node, 'after_script',
+ encoding),
+ 'action': _extractActionNode(t_node, encoding),
+ 'guard': _extractGuardNode(t_node, encoding)}
- info[ 'variables' ] = var_map = {}
+ info['variables'] = var_map = {}
- for assignment in t_node.getElementsByTagName( 'assignment' ):
+ for assignment in t_node.getElementsByTagName('assignment'):
- name = _getNodeAttribute( assignment, 'name', encoding )
- expr = _coalesceTextNodeChildren( assignment, encoding )
- var_map[ name ] = expr
+ name = _getNodeAttribute(assignment, 'name', encoding)
+ expr = _coalesceTextNodeChildren(assignment, encoding)
+ var_map[name] = expr
- result.append( info )
+ result.append(info)
return result
-def _extractVariableNodes( root, encoding='utf-8' ):
-
+def _extractVariableNodes(root, encoding='utf-8'):
result = []
- for v_node in root.getElementsByTagName( 'variable' ):
+ for v_node in root.getElementsByTagName('variable'):
- info = { 'variable_id' : _getNodeAttribute( v_node, 'variable_id'
- , encoding )
- , 'description' : _extractDescriptionNode( v_node, encoding )
- , 'for_catalog' : _queryNodeAttributeBoolean( v_node
- , 'for_catalog'
- , False
- )
- , 'for_status' : _queryNodeAttributeBoolean( v_node
- , 'for_status'
- , False
- )
- , 'update_always' : _queryNodeAttributeBoolean( v_node
- , 'update_always'
- , False
- )
- , 'default' : _extractDefaultNode( v_node, encoding )
- , 'guard' : _extractGuardNode( v_node, encoding )
- }
+ info = {'variable_id': _getNodeAttribute(v_node, 'variable_id',
+ encoding),
+ 'description': _extractDescriptionNode(v_node, encoding),
+ 'for_catalog': _queryNodeAttributeBoolean(v_node,
+ 'for_catalog', False),
+ 'for_status': _queryNodeAttributeBoolean(v_node, 'for_status',
+ False),
+ 'update_always': _queryNodeAttributeBoolean(v_node,
+ 'update_always', False),
+ 'default': _extractDefaultNode(v_node, encoding),
+ 'guard': _extractGuardNode(v_node, encoding)}
- result.append( info )
+ result.append(info)
return result
-def _extractWorklistNodes( root, encoding='utf-8' ):
-
+def _extractWorklistNodes(root, encoding='utf-8'):
result = []
- for w_node in root.getElementsByTagName( 'worklist' ):
+ for w_node in root.getElementsByTagName('worklist'):
- info = { 'worklist_id' : _getNodeAttribute( w_node, 'worklist_id'
- , encoding )
- , 'title' : _getNodeAttribute( w_node, 'title' , encoding )
- , 'description' : _extractDescriptionNode( w_node, encoding )
- , 'match' : _extractMatchNode( w_node, encoding )
- , 'action' : _extractActionNode( w_node, encoding )
- , 'guard' : _extractGuardNode( w_node, encoding )
- }
+ info = {'worklist_id': _getNodeAttribute(w_node, 'worklist_id',
+ encoding),
+ 'title': _getNodeAttribute(w_node, 'title', encoding),
+ 'description': _extractDescriptionNode(w_node, encoding),
+ 'match': _extractMatchNode(w_node, encoding),
+ 'action': _extractActionNode(w_node, encoding),
+ 'guard': _extractGuardNode(w_node, encoding)}
- result.append( info )
+ result.append(info)
return result
-def _extractScriptNodes( root, encoding='utf-8' ):
-
+def _extractScriptNodes(root, encoding='utf-8'):
result = []
- for s_node in root.getElementsByTagName( 'script' ):
+ for s_node in root.getElementsByTagName('script'):
try:
- function = _getNodeAttribute( s_node, 'function' )
+ function = _getNodeAttribute(s_node, 'function')
except ValueError:
function = ''
try:
- module = _getNodeAttribute( s_node, 'module' )
+ module = _getNodeAttribute(s_node, 'module')
except ValueError:
module = ''
- info = { 'script_id' : _getNodeAttribute( s_node, 'script_id' )
- , 'meta_type' : _getNodeAttribute( s_node, 'type' , encoding )
- , 'function' : function
- , 'module' : module
- }
+ info = {'script_id': _getNodeAttribute(s_node, 'script_id'),
+ 'meta_type': _getNodeAttribute(s_node, 'type', encoding),
+ 'function': function,
+ 'module': module}
- filename = _queryNodeAttribute( s_node, 'filename' , None, encoding )
+ filename = _queryNodeAttribute(s_node, 'filename', None, encoding)
if filename is not None:
- info[ 'filename' ] = filename
+ info['filename'] = filename
- result.append( info )
+ result.append(info)
return result
-def _extractPermissionNodes( root, encoding='utf-8' ):
-
+def _extractPermissionNodes(root, encoding='utf-8'):
result = []
- for p_node in root.getElementsByTagName( 'permission' ):
+ for p_node in root.getElementsByTagName('permission'):
- result.append( _coalesceTextNodeChildren( p_node, encoding ) )
+ result.append(_coalesceTextNodeChildren(p_node, encoding))
return result
-def _extractActionNode( parent, encoding='utf-8' ):
+def _extractActionNode(parent, encoding='utf-8'):
+ nodes = parent.getElementsByTagName('action')
+ assert len(nodes) <= 1, nodes
- nodes = parent.getElementsByTagName( 'action' )
- assert len( nodes ) <= 1, nodes
+ if len(nodes) < 1:
+ return {'name': '', 'url': '', 'category': '', 'icon': ''}
- if len( nodes ) < 1:
- return { 'name' : '', 'url' : '', 'category' : '', 'icon': ''}
+ node = nodes[0]
- node = nodes[ 0 ]
+ return {'name': _coalesceTextNodeChildren(node, encoding),
+ 'url': _getNodeAttribute(node, 'url', encoding),
+ 'category': _getNodeAttribute(node, 'category', encoding),
+ 'icon': _queryNodeAttribute(node, 'icon', '', encoding)}
- return { 'name' : _coalesceTextNodeChildren( node, encoding )
- , 'url' : _getNodeAttribute( node, 'url', encoding )
- , 'category' : _getNodeAttribute( node, 'category', encoding )
- , 'icon' : _queryNodeAttribute( node, 'icon', '', encoding )
- }
+def _extractGuardNode(parent, encoding='utf-8'):
+ nodes = parent.getElementsByTagName('guard')
+ assert len(nodes) <= 1, nodes
-def _extractGuardNode( parent, encoding='utf-8' ):
+ if len(nodes) < 1:
+ return {'permissions': (), 'roles': (), 'groups': (), 'expr': ''}
- nodes = parent.getElementsByTagName( 'guard' )
- assert len( nodes ) <= 1, nodes
+ node = nodes[0]
- if len( nodes ) < 1:
- return { 'permissions' : (), 'roles' : (), 'groups' : (), 'expr' : '' }
+ expr_nodes = node.getElementsByTagName('guard-expression')
+ assert(len(expr_nodes) <= 1)
- node = nodes[ 0 ]
+ expr_text = expr_nodes and _coalesceTextNodeChildren(expr_nodes[0],
+ encoding) or ''
- expr_nodes = node.getElementsByTagName( 'guard-expression' )
- assert( len( expr_nodes ) <= 1 )
+ return {'permissions': [ _coalesceTextNodeChildren(x, encoding)
+ for x in node.getElementsByTagName(
+ 'guard-permission') ],
+ 'roles': [ _coalesceTextNodeChildren(x, encoding)
+ for x in node.getElementsByTagName('guard-role') ],
+ 'groups': [ _coalesceTextNodeChildren(x, encoding)
+ for x in node.getElementsByTagName('guard-group') ],
+ 'expression': expr_text}
- expr_text = expr_nodes and _coalesceTextNodeChildren( expr_nodes[ 0 ]
- , encoding
- ) or ''
+def _extractDefaultNode(parent, encoding='utf-8'):
+ nodes = parent.getElementsByTagName('default')
+ assert len(nodes) <= 1, nodes
- return { 'permissions' : [ _coalesceTextNodeChildren( x, encoding )
- for x in node.getElementsByTagName(
- 'guard-permission' ) ]
- , 'roles' : [ _coalesceTextNodeChildren( x, encoding )
- for x in node.getElementsByTagName( 'guard-role' ) ]
- , 'groups' : [ _coalesceTextNodeChildren( x, encoding )
- for x in node.getElementsByTagName( 'guard-group' ) ]
- , 'expression' : expr_text
- }
+ if len(nodes) < 1:
+ return {'value': '', 'expression': '', 'type': 'n/a'}
-def _extractDefaultNode( parent, encoding='utf-8' ):
+ node = nodes[0]
- nodes = parent.getElementsByTagName( 'default' )
- assert len( nodes ) <= 1, nodes
+ value_nodes = node.getElementsByTagName('value')
+ assert(len(value_nodes) <= 1)
- if len( nodes ) < 1:
- return { 'value' : '', 'expression' : '', 'type' : 'n/a' }
-
- node = nodes[ 0 ]
-
- value_nodes = node.getElementsByTagName( 'value' )
- assert( len( value_nodes ) <= 1 )
-
value_type = 'n/a'
if value_nodes:
- value_type = value_nodes[ 0 ].getAttribute( 'type' ) or 'n/a'
+ value_type = value_nodes[0].getAttribute('type') or 'n/a'
- value_text = value_nodes and _coalesceTextNodeChildren( value_nodes[ 0 ]
- , encoding
- ) or ''
+ value_text = value_nodes and _coalesceTextNodeChildren(value_nodes[0],
+ encoding) or ''
- expr_nodes = node.getElementsByTagName( 'expression' )
- assert( len( expr_nodes ) <= 1 )
+ expr_nodes = node.getElementsByTagName('expression')
+ assert(len(expr_nodes) <= 1)
- expr_text = expr_nodes and _coalesceTextNodeChildren( expr_nodes[ 0 ]
- , encoding
- ) or ''
+ expr_text = expr_nodes and _coalesceTextNodeChildren(expr_nodes[0],
+ encoding) or ''
- return { 'value' : value_text
- , 'type' : value_type
- , 'expression' : expr_text
- }
+ return {'value': value_text, 'type': value_type, 'expression': expr_text}
-_SEMICOLON_LIST_SPLITTER = re.compile( r';[ ]*' )
+_SEMICOLON_LIST_SPLITTER = re.compile(r';[ ]*')
-def _extractMatchNode( parent, encoding='utf-8' ):
+def _extractMatchNode(parent, encoding='utf-8'):
+ nodes = parent.getElementsByTagName('match')
- nodes = parent.getElementsByTagName( 'match' )
-
result = {}
for node in nodes:
- name = _getNodeAttribute( node, 'name', encoding )
- values = _getNodeAttribute( node, 'values', encoding )
- result[ name ] = _SEMICOLON_LIST_SPLITTER.split( values )
+ name = _getNodeAttribute(node, 'name', encoding)
+ values = _getNodeAttribute(node, 'values', encoding)
+ result[name] = _SEMICOLON_LIST_SPLITTER.split(values)
return result
-def _guessVariableType( value ):
-
+def _guessVariableType(value):
from DateTime.DateTime import DateTime
if value is None:
return 'none'
- if isinstance( value, DateTime ):
+ if isinstance(value, DateTime):
return 'datetime'
- if isinstance( value, bool ):
+ if isinstance(value, bool):
return 'bool'
- if isinstance( value, int ):
+ if isinstance(value, int):
return 'int'
- if isinstance( value, float ):
+ if isinstance(value, float):
return 'float'
- if isinstance( value, basestring ):
+ if isinstance(value, basestring):
return 'string'
return 'unknown'
-def _convertVariableValue( value, type_id ):
-
+def _convertVariableValue(value, type_id):
from DateTime.DateTime import DateTime
if type_id == 'none':
@@ -964,24 +902,24 @@
if type_id == 'datetime':
- return DateTime( value )
+ return DateTime(value)
if type_id == 'bool':
- if isinstance( value, basestring ):
+ if isinstance(value, basestring):
- value = str( value ).lower()
+ value = str(value).lower()
- return value in ( 'true', 'yes', '1' )
+ return value in ('true', 'yes', '1')
else:
- return bool( value )
+ return bool(value)
if type_id == 'int':
- return int( value )
+ return int(value)
if type_id == 'float':
- return float( value )
+ return float(value)
return value
@@ -989,26 +927,24 @@
from Products.ExternalMethod.ExternalMethod import ExternalMethod
from OFS.DTMLMethod import DTMLMethod
-_METATYPE_SUFFIXES = \
-{ PythonScript.meta_type : 'py'
-, DTMLMethod.meta_type : 'dtml'
-}
+_METATYPE_SUFFIXES = {
+ PythonScript.meta_type: 'py',
+ DTMLMethod.meta_type: 'dtml'}
-def _initDCWorkflow( workflow
- , title
- , description
- , manager_bypass
- , creation_guard
- , state_variable
- , initial_state
- , states
- , transitions
- , variables
- , worklists
- , permissions
- , scripts
- , context
- ):
+def _initDCWorkflow(workflow,
+ title,
+ description,
+ manager_bypass,
+ creation_guard,
+ state_variable,
+ initial_state,
+ states,
+ transitions,
+ variables,
+ worklists,
+ permissions,
+ scripts,
+ context):
""" Initialize a DC Workflow using values parsed from XML.
"""
workflow.title = title
@@ -1021,208 +957,187 @@
permissions.sort()
workflow.permissions = tuple(permissions)
- _initDCWorkflowCreationGuard( workflow, creation_guard )
- _initDCWorkflowVariables( workflow, variables )
- _initDCWorkflowStates( workflow, states )
- _initDCWorkflowTransitions( workflow, transitions )
- _initDCWorkflowWorklists( workflow, worklists )
- _initDCWorkflowScripts( workflow, scripts, context )
+ _initDCWorkflowCreationGuard(workflow, creation_guard)
+ _initDCWorkflowVariables(workflow, variables)
+ _initDCWorkflowStates(workflow, states)
+ _initDCWorkflowTransitions(workflow, transitions)
+ _initDCWorkflowWorklists(workflow, worklists)
+ _initDCWorkflowScripts(workflow, scripts, context)
-def _initDCWorkflowCreationGuard( workflow, guard ):
+def _initDCWorkflowCreationGuard(workflow, guard):
"""Initialize Instance creation conditions guard
"""
- if guard is None :
+ if guard is None:
workflow.creation_guard = None
- else :
- props = { 'guard_roles' : ';'.join( guard[ 'roles' ] )
- , 'guard_permissions' : ';'.join( guard[ 'permissions' ] )
- , 'guard_groups' : ';'.join( guard[ 'groups' ] )
- , 'guard_expr' : guard[ 'expression' ]
- }
+ else:
+ props = {'guard_roles': ';'.join(guard['roles']),
+ 'guard_permissions': ';'.join(guard['permissions']),
+ 'guard_groups': ';'.join(guard['groups']),
+ 'guard_expr': guard['expression']}
g = Guard()
g.changeFromProperties(props)
workflow.creation_guard = g
-def _initDCWorkflowVariables( workflow, variables ):
-
+def _initDCWorkflowVariables(workflow, variables):
""" Initialize DCWorkflow variables
"""
from Products.DCWorkflow.Variables import VariableDefinition
for v_info in variables:
- id = str( v_info[ 'variable_id' ] ) # no unicode!
- if not workflow.variables.has_key(id):
+ id = str(v_info['variable_id']) # no unicode!
+ if not id in workflow.variables:
v = VariableDefinition(id)
workflow.variables._setObject(id, v)
- v = workflow.variables._getOb( id )
+ v = workflow.variables._getOb(id)
- guard = v_info[ 'guard' ]
- props = { 'guard_roles' : ';'.join( guard[ 'roles' ] )
- , 'guard_permissions' : ';'.join( guard[ 'permissions' ] )
- , 'guard_groups' : ';'.join( guard[ 'groups' ] )
- , 'guard_expr' : guard[ 'expression' ]
- }
+ guard = v_info['guard']
+ props = {'guard_roles': ';'.join(guard['roles']),
+ 'guard_permissions': ';'.join(guard['permissions']),
+ 'guard_groups': ';'.join(guard['groups']),
+ 'guard_expr': guard['expression']}
- default = v_info[ 'default' ]
- default_value = _convertVariableValue( default[ 'value' ]
- , default[ 'type' ] )
+ default = v_info['default']
+ default_value = _convertVariableValue(default['value'],
+ default['type'])
- v.setProperties( description = v_info[ 'description' ]
- , default_value = default_value
- , default_expr = default[ 'expression' ]
- , for_catalog = v_info[ 'for_catalog' ]
- , for_status = v_info[ 'for_status' ]
- , update_always = v_info[ 'update_always' ]
- , props = props
- )
+ v.setProperties(description=v_info['description'],
+ default_value=default_value,
+ default_expr=default['expression'],
+ for_catalog=v_info['for_catalog'],
+ for_status=v_info['for_status'],
+ update_always=v_info['update_always'],
+ props=props)
-
-def _initDCWorkflowStates( workflow, states ):
-
+def _initDCWorkflowStates(workflow, states):
""" Initialize DCWorkflow states
"""
from Products.DCWorkflow.States import StateDefinition
for s_info in states:
- id = str( s_info[ 'state_id' ] ) # no unicode!
- if not workflow.states.has_key(id):
+ id = str(s_info['state_id']) # no unicode!
+ if not id in workflow.states:
s = StateDefinition(id)
workflow.states._setObject(id, s)
- s = workflow.states._getOb( id )
+ s = workflow.states._getOb(id)
- s.setProperties( title = s_info[ 'title' ]
- , description = s_info[ 'description' ]
- , transitions = s_info[ 'transitions' ]
- )
+ s.setProperties(title=s_info['title'],
+ description=s_info['description'],
+ transitions=s_info['transitions'])
- for k, v in s_info[ 'permissions' ].items():
- s.setPermission( k, isinstance(v, list), v )
+ for k, v in s_info['permissions'].items():
+ s.setPermission(k, isinstance(v, list), v)
gmap = s.group_roles = PersistentMapping()
- for group_id, roles in s_info[ 'groups' ]:
- gmap[ group_id ] = roles
+ for group_id, roles in s_info['groups']:
+ gmap[group_id] = roles
vmap = s.var_values = PersistentMapping()
- for name, v_info in s_info[ 'variables' ].items():
+ for name, v_info in s_info['variables'].items():
+ value = _convertVariableValue(v_info['value'], v_info['type'])
+ vmap[name] = value
- value = _convertVariableValue( v_info[ 'value' ]
- , v_info[ 'type' ] )
-
- vmap[ name ] = value
-
-
-def _initDCWorkflowTransitions( workflow, transitions ):
-
+def _initDCWorkflowTransitions(workflow, transitions):
""" Initialize DCWorkflow transitions
"""
from Products.DCWorkflow.Transitions import TransitionDefinition
for t_info in transitions:
- id = str( t_info[ 'transition_id' ] ) # no unicode!
- if not workflow.transitions.has_key(id):
+ id = str(t_info['transition_id']) # no unicode!
+ if not id in workflow.transitions:
t = TransitionDefinition(id)
workflow.transitions._setObject(id, t)
- t = workflow.transitions._getOb( id )
+ t = workflow.transitions._getOb(id)
- trigger_type = list( TRIGGER_TYPES ).index( t_info[ 'trigger' ] )
+ trigger_type = list(TRIGGER_TYPES).index(t_info['trigger'])
- action = t_info[ 'action' ]
+ action = t_info['action']
- guard = t_info[ 'guard' ]
- props = { 'guard_roles' : ';'.join( guard[ 'roles' ] )
- , 'guard_permissions' : ';'.join( guard[ 'permissions' ] )
- , 'guard_groups' : ';'.join( guard[ 'groups' ] )
- , 'guard_expr' : guard[ 'expression' ]
- }
+ guard = t_info['guard']
+ props = {'guard_roles': ';'.join(guard['roles']),
+ 'guard_permissions': ';'.join(guard['permissions']),
+ 'guard_groups': ';'.join(guard['groups']),
+ 'guard_expr': guard['expression']}
- t.setProperties( title = t_info[ 'title' ]
- , description = t_info[ 'description' ]
- , new_state_id = t_info[ 'new_state' ]
- , trigger_type = trigger_type
- , script_name = t_info[ 'before_script' ]
- , after_script_name = t_info[ 'after_script' ]
- , actbox_name = action[ 'name' ]
- , actbox_url = action[ 'url' ]
- , actbox_category = action[ 'category' ]
- , actbox_icon = action.get('icon', '')
- , props = props
- )
- var_mapping = [(name, Expression(text)) for name, text in
- t_info[ 'variables' ].items()]
+ t.setProperties(title=t_info['title'],
+ description=t_info['description'],
+ new_state_id=t_info['new_state'],
+ trigger_type=trigger_type,
+ script_name=t_info['before_script'],
+ after_script_name=t_info['after_script'],
+ actbox_name=action['name'],
+ actbox_url=action['url'],
+ actbox_category=action['category'],
+ actbox_icon=action.get('icon', ''),
+ props=props)
+ var_mapping = [ (name, Expression(text))
+ for name, text in t_info['variables'].items() ]
t.var_exprs = PersistentMapping(var_mapping)
-def _initDCWorkflowWorklists( workflow, worklists ):
-
+def _initDCWorkflowWorklists(workflow, worklists):
""" Initialize DCWorkflow worklists
"""
from Products.DCWorkflow.Worklists import WorklistDefinition
for w_info in worklists:
- id = str( w_info[ 'worklist_id' ] ) # no unicode!
- if not workflow.worklists.has_key(id):
+ id = str(w_info['worklist_id']) # no unicode!
+ if not id in workflow.worklists:
w = WorklistDefinition(id)
workflow.worklists._setObject(id, w)
- w = workflow.worklists._getOb( id )
+ w = workflow.worklists._getOb(id)
- action = w_info[ 'action' ]
+ action = w_info['action']
- guard = w_info[ 'guard' ]
- props = { 'guard_roles' : ';'.join( guard[ 'roles' ] )
- , 'guard_permissions' : ';'.join( guard[ 'permissions' ] )
- , 'guard_groups' : ';'.join( guard[ 'groups' ] )
- , 'guard_expr' : guard[ 'expression' ]
- }
+ guard = w_info['guard']
+ props = {'guard_roles': ';'.join(guard['roles']),
+ 'guard_permissions': ';'.join(guard['permissions']),
+ 'guard_groups': ';'.join(guard['groups']),
+ 'guard_expr': guard['expression']}
- w.setProperties( description = w_info[ 'description' ]
- , actbox_name = action[ 'name' ]
- , actbox_url = action[ 'url' ]
- , actbox_category = action[ 'category' ]
- , actbox_icon = action.get('icon', '')
- , props = props
- )
+ w.setProperties(description=w_info['description'],
+ actbox_name=action['name'],
+ actbox_url=action['url'],
+ actbox_category=action['category'],
+ actbox_icon=action.get('icon', ''),
+ props=props)
w.var_matches = PersistentMapping()
- for k, v in w_info[ 'match' ].items():
- w.var_matches[ str( k ) ] = tuple( [ str(x) for x in v ] )
+ for k, v in w_info['match'].items():
+ w.var_matches[str(k)] = tuple([ str(x) for x in v ])
-def _initDCWorkflowScripts( workflow, scripts, context ):
-
+def _initDCWorkflowScripts(workflow, scripts, context):
""" Initialize DCWorkflow scripts
"""
for s_info in scripts:
- id = str( s_info[ 'script_id' ] ) # no unicode!
- meta_type = s_info[ 'meta_type' ]
- filename = s_info[ 'filename' ]
+ id = str(s_info['script_id']) # no unicode!
+ meta_type = s_info['meta_type']
+ filename = s_info['filename']
file = ''
if filename:
- file = context.readDataFile( filename )
+ file = context.readDataFile(filename)
if meta_type == PythonScript.meta_type:
- script = PythonScript( id )
- script.write( file )
+ script = PythonScript(id)
+ script.write(file)
elif meta_type == ExternalMethod.meta_type:
- script = ExternalMethod( id
- , ''
- , s_info['module']
- , s_info['function']
- )
+ script = ExternalMethod(id, '', s_info['module'],
+ s_info['function'])
elif meta_type == DTMLMethod.meta_type:
- script = DTMLMethod( file, __name__=id )
+ script = DTMLMethod(file, __name__=id)
else:
for mt in workflow.scripts.filtered_meta_types():
- if mt['name']==meta_type:
+ if mt['name'] == meta_type:
if hasattr(mt['instance'], 'write'):
script = mt['instance'](id)
script.write(file)
@@ -1230,24 +1145,23 @@
script = mt['instance'](file, __name__=id)
break
else:
- raise ValueError, 'Invalid type: %s' % meta_type
+ raise ValueError('Invalid type: %s' % meta_type)
- if workflow.scripts.has_key(id):
+ if id in workflow.scripts:
workflow.scripts._delObject(id)
- workflow.scripts._setObject( id, script )
+ workflow.scripts._setObject(id, script)
#
# deprecated DOM parsing utilities
#
_marker = object()
-def _queryNodeAttribute( node, attr_name, default, encoding='utf-8' ):
-
+def _queryNodeAttribute(node, attr_name, default, encoding='utf-8'):
""" Extract a string-valued attribute from node.
o Return 'default' if the attribute is not present.
"""
- attr_node = node.attributes.get( attr_name, _marker )
+ attr_node = node.attributes.get(attr_name, _marker)
if attr_node is _marker:
return default
@@ -1255,46 +1169,42 @@
value = attr_node.nodeValue
if encoding is not None:
- value = value.encode( encoding )
+ value = value.encode(encoding)
return value
-def _getNodeAttribute( node, attr_name, encoding='utf-8' ):
-
+def _getNodeAttribute(node, attr_name, encoding='utf-8'):
""" Extract a string-valued attribute from node.
"""
- value = _queryNodeAttribute( node, attr_name, _marker, encoding )
+ value = _queryNodeAttribute(node, attr_name, _marker, encoding)
if value is _marker:
- raise ValueError, 'Invalid attribute: %s' % attr_name
+ raise ValueError('Invalid attribute: %s' % attr_name)
return value
-def _queryNodeAttributeBoolean( node, attr_name, default ):
-
+def _queryNodeAttributeBoolean(node, attr_name, default):
""" Extract a string-valued attribute from node.
o Return 'default' if the attribute is not present.
"""
- attr_node = node.attributes.get( attr_name, _marker )
+ attr_node = node.attributes.get(attr_name, _marker)
if attr_node is _marker:
return default
- value = node.attributes[ attr_name ].nodeValue.lower()
+ value = node.attributes[attr_name].nodeValue.lower()
- return value in ( 'true', 'yes', '1' )
+ return value in ('true', 'yes', '1')
-def _getNodeAttributeBoolean( node, attr_name ):
-
+def _getNodeAttributeBoolean(node, attr_name):
""" Extract a string-valued attribute from node.
"""
- value = node.attributes[ attr_name ].nodeValue.lower()
+ value = node.attributes[attr_name].nodeValue.lower()
- return value in ( 'true', 'yes', '1' )
+ return value in ('true', 'yes', '1')
-def _coalesceTextNodeChildren( node, encoding='utf-8' ):
-
+def _coalesceTextNodeChildren(node, encoding='utf-8'):
""" Concatenate all childe text nodes into a single string.
"""
from xml.dom import Node
@@ -1305,19 +1215,19 @@
while child is not None:
if child.nodeType == Node.TEXT_NODE:
- fragments.append( child.nodeValue )
+ fragments.append(child.nodeValue)
child = child.nextSibling
- joined = ''.join( fragments )
+ joined = ''.join(fragments)
if encoding is not None:
- joined = joined.encode( encoding )
+ joined = joined.encode(encoding)
- return ''.join( [ line.lstrip() for line in joined.splitlines(True) ] ).rstrip()
+ return ''.join([ line.lstrip()
+ for line in joined.splitlines(True) ]).rstrip()
def _extractDescriptionNode(parent, encoding='utf-8'):
-
d_nodes = parent.getElementsByTagName('description')
if d_nodes:
return _coalesceTextNodeChildren(d_nodes[0], encoding)
Modified: Products.DCWorkflow/trunk/Products/DCWorkflow/utils.py
===================================================================
--- Products.DCWorkflow/trunk/Products/DCWorkflow/utils.py 2012-04-24 10:36:45 UTC (rev 125268)
+++ Products.DCWorkflow/trunk/Products/DCWorkflow/utils.py 2012-04-24 10:37:03 UTC (rev 125269)
@@ -23,8 +23,8 @@
security = ModuleSecurityInfo('Products.DCWorkflow.utils')
-_dtmldir = os.path.join( package_home( globals() ), 'dtml' )
-_xmldir = os.path.join( package_home( globals() ), 'xml' )
+_dtmldir = os.path.join(package_home(globals()), 'dtml')
+_xmldir = os.path.join(package_home(globals()), 'xml')
def ac_inherited_permissions(ob, all=0):
@@ -33,14 +33,15 @@
# an empty tuple as the second.
d = {}
perms = getattr(ob, '__ac_permissions__', ())
- for p in perms: d[p[0]] = None
+ for p in perms:
+ d[p[0]] = None
r = gather_permissions(ob.__class__, [], d)
if all:
if hasattr(ob, '_subobject_permissions'):
for p in ob._subobject_permissions():
- pname=p[0]
- if not d.has_key(pname):
- d[pname]=1
+ pname = p[0]
+ if not pname in d:
+ d[pname] = 1
r.append(p)
r = list(perms) + r
return r
@@ -92,7 +93,7 @@
roles.remove(role)
changed = 1
if changed:
- if not roles and local_roles.has_key(group):
+ if not roles and group in local_roles:
del local_roles[group]
else:
local_roles[group] = roles
More information about the checkins
mailing list