def _extractStateNodes(root, encoding=None): result = [] 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['transitions'] = [ _getNodeAttribute(x, 'transition_id', encoding) for x in s_node.getElementsByTagName('exit-transition') ] info['permissions'] = permission_map = {} for p_map in s_node.getElementsByTagName('permission-map'): name = _getNodeAttribute(p_map, 'name', encoding) acquired = _getNodeAttributeBoolean(p_map, 'acquired') roles = [ _coalesceTextNodeChildren(x, encoding) for x in p_map.getElementsByTagName('permission-role') ] if not acquired: roles = tuple(roles) permission_map[name] = roles info['groups'] = group_map = [] for g_map in s_node.getElementsByTagName('group-map'): name = _getNodeAttribute(g_map, 'name', encoding) roles = [ _coalesceTextNodeChildren(x, encoding) for x in g_map.getElementsByTagName('group-role') ] group_map.append((name, tuple(roles))) info['variables'] = var_map = {} for assignment in s_node.getElementsByTagName('assignment'): 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} result.append(info) return result
def _extractTransitionNodes( root, encoding=None ): result = [] for t_node in root.getElementsByTagName( 'transition' ): info = { 'transition_id' : _getNodeAttribute( t_node, 'transition_id' , encoding ) , 'title' : _getNodeAttribute( t_node, 'title', encoding ) , 'description' : _coalesceTextNodeChildren( 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 = {} for assignment in t_node.getElementsByTagName( 'assignment' ): name = _getNodeAttribute( assignment, 'name', encoding ) expr = _coalesceTextNodeChildren( assignment, encoding ) var_map[ name ] = expr result.append( info ) return result
def _extractStateNodes( root, encoding=None ): result = [] 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[ 'transitions' ] = [ _getNodeAttribute( x, 'transition_id' , encoding ) for x in s_node.getElementsByTagName( 'exit-transition' ) ] info[ 'permissions' ] = permission_map = {} for p_map in s_node.getElementsByTagName( 'permission-map' ): name = _getNodeAttribute( p_map, 'name', encoding ) acquired = _getNodeAttributeBoolean( p_map, 'acquired' ) roles = [ _coalesceTextNodeChildren( x, encoding ) for x in p_map.getElementsByTagName( 'permission-role' ) ] if not acquired: roles = tuple( roles ) permission_map[ name ] = roles info[ 'groups' ] = group_map = [] for g_map in s_node.getElementsByTagName( 'group-map' ): name = _getNodeAttribute( g_map, 'name', encoding ) roles = [ _coalesceTextNodeChildren( x, encoding ) for x in g_map.getElementsByTagName( 'group-role' ) ] group_map.append( ( name, tuple( roles ) ) ) info[ 'variables' ] = var_map = {} for assignment in s_node.getElementsByTagName( 'assignment' ): 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 } result.append( info ) return result
def _extractDefaultNode( parent, encoding=None ): nodes = parent.getElementsByTagName( 'default' ) assert len( nodes ) <= 1, nodes 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_text = value_nodes and _coalesceTextNodeChildren( value_nodes[ 0 ] , encoding ) or '' expr_nodes = node.getElementsByTagName( 'expression' ) assert( len( expr_nodes ) <= 1 ) expr_text = expr_nodes and _coalesceTextNodeChildren( expr_nodes[ 0 ] , encoding ) or '' return { 'value' : value_text , 'type' : value_type , 'expression' : expr_text }
def _extractDefaultNode(parent, encoding=None): nodes = parent.getElementsByTagName('default') assert len(nodes) <= 1, nodes 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_text = value_nodes and _coalesceTextNodeChildren( value_nodes[0], encoding) or '' expr_nodes = node.getElementsByTagName('expression') assert (len(expr_nodes) <= 1) expr_text = expr_nodes and _coalesceTextNodeChildren( expr_nodes[0], encoding) or '' return {'value': value_text, 'type': value_type, 'expression': expr_text}
def _extractGuardNode(parent, encoding=None): nodes = parent.getElementsByTagName('guard') assert len(nodes) <= 1, nodes if len(nodes) < 1: return {'permissions': (), 'roles': (), 'groups': (), 'expr': ''} node = nodes[0] expr_nodes = node.getElementsByTagName('guard-expression') assert (len(expr_nodes) <= 1) expr_text = expr_nodes and _coalesceTextNodeChildren( expr_nodes[0], encoding) or '' 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 }
def _extractTransitionNodes(root, encoding=None): result = [] for t_node in root.getElementsByTagName('transition'): info = { 'transition_id': _getNodeAttribute(t_node, 'transition_id', encoding), 'title': _getNodeAttribute(t_node, 'title', encoding), 'description': _coalesceTextNodeChildren(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 = {} for assignment in t_node.getElementsByTagName('assignment'): name = _getNodeAttribute(assignment, 'name', encoding) expr = _coalesceTextNodeChildren(assignment, encoding) var_map[name] = expr result.append(info) return result
def _extractGuardNode( parent, encoding=None ): nodes = parent.getElementsByTagName( 'guard' ) assert len( nodes ) <= 1, nodes if len( nodes ) < 1: return { 'permissions' : (), 'roles' : (), 'groups' : (), 'expr' : '' } node = nodes[ 0 ] expr_nodes = node.getElementsByTagName( 'guard-expression' ) assert( len( expr_nodes ) <= 1 ) expr_text = expr_nodes and _coalesceTextNodeChildren( expr_nodes[ 0 ] , encoding ) or '' 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 }
def _extractVariableNodes( root, encoding=None ): result = [] for v_node in root.getElementsByTagName( 'variable' ): info = { 'variable_id' : _getNodeAttribute( v_node, 'variable_id' , encoding ) , 'description' : _coalesceTextNodeChildren( v_node, encoding ) , 'for_catalog' : _getNodeAttributeBoolean( v_node , 'for_catalog' ) , 'for_status' : _getNodeAttributeBoolean( v_node , 'for_status' ) , 'update_always' : _getNodeAttributeBoolean( v_node , 'update_always' ) , 'default' : _extractDefaultNode( v_node, encoding ) , 'guard' : _extractGuardNode( v_node, encoding ) } result.append( info ) return result
def _extractAllowedContentTypeNodes(parent, encoding=None): result = [] for act_node in parent.getElementsByTagName('allowed_content_type'): value = _coalesceTextNodeChildren(act_node, encoding) result.append(value) return tuple(result)
def _extractPermissionNodes(parent, encoding=None): result = [] for p_node in parent.getElementsByTagName('permission'): value = _coalesceTextNodeChildren(p_node, encoding) result.append(value) return tuple(result)
def _extractPermissionNodes( root, encoding=None ): result = [] for p_node in root.getElementsByTagName( 'permission' ): result.append( _coalesceTextNodeChildren( p_node, encoding ) ) return result
def _extractPermissionNodes(root, encoding=None): result = [] for p_node in root.getElementsByTagName('permission'): result.append(_coalesceTextNodeChildren(p_node, encoding)) return result
def _extractActionNode( parent, encoding=None ): nodes = parent.getElementsByTagName( 'action' ) assert len( nodes ) <= 1, nodes if len( nodes ) < 1: return { 'name' : '', 'url' : '', 'category' : '' } node = nodes[ 0 ] return { 'name' : _coalesceTextNodeChildren( node, encoding ) , 'url' : _getNodeAttribute( node, 'url', encoding ) , 'category' : _getNodeAttribute( node, 'category', encoding ) }
def _extractWorklistNodes( root, encoding=None ): result = [] for w_node in root.getElementsByTagName( 'worklist' ): info = { 'worklist_id' : _getNodeAttribute( w_node, 'worklist_id' , encoding ) , 'title' : _getNodeAttribute( w_node, 'title' , encoding ) , 'description' : _coalesceTextNodeChildren( w_node, encoding ) , 'match' : _extractMatchNode( w_node, encoding ) , 'action' : _extractActionNode( w_node, encoding ) , 'guard' : _extractGuardNode( w_node, encoding ) } result.append( info ) return result
def _extractWorklistNodes(root, encoding=None): result = [] for w_node in root.getElementsByTagName('worklist'): info = { 'worklist_id': _getNodeAttribute(w_node, 'worklist_id', encoding), 'title': _getNodeAttribute(w_node, 'title', encoding), 'description': _coalesceTextNodeChildren(w_node, encoding), 'match': _extractMatchNode(w_node, encoding), 'action': _extractActionNode(w_node, encoding), 'guard': _extractGuardNode(w_node, encoding) } result.append(info) return result
def _extractVariableNodes(root, encoding=None): result = [] for v_node in root.getElementsByTagName('variable'): info = { 'variable_id': _getNodeAttribute(v_node, 'variable_id', encoding), 'description': _coalesceTextNodeChildren(v_node, encoding), 'for_catalog': _getNodeAttributeBoolean(v_node, 'for_catalog'), 'for_status': _getNodeAttributeBoolean(v_node, 'for_status'), 'update_always': _getNodeAttributeBoolean(v_node, 'update_always'), 'default': _extractDefaultNode(v_node, encoding), 'guard': _extractGuardNode(v_node, encoding) } result.append(info) return result