Beispiel #1
0
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
Beispiel #2
0
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
Beispiel #3
0
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
Beispiel #4
0
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
           }
Beispiel #5
0
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}
Beispiel #6
0
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
    }
Beispiel #7
0
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
Beispiel #8
0
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
           }
Beispiel #9
0
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
Beispiel #10
0
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)
Beispiel #11
0
def _extractPermissionNodes(parent, encoding=None):

    result = []

    for p_node in parent.getElementsByTagName('permission'):
        value = _coalesceTextNodeChildren(p_node, encoding)
        result.append(value)

    return tuple(result)
Beispiel #12
0
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)
Beispiel #13
0
def _extractPermissionNodes( root, encoding=None ):

    result = []

    for p_node in root.getElementsByTagName( 'permission' ):

        result.append( _coalesceTextNodeChildren( p_node, encoding ) )

    return result
Beispiel #14
0
def _extractPermissionNodes(parent, encoding=None):

    result = []

    for p_node in parent.getElementsByTagName('permission'):
        value = _coalesceTextNodeChildren(p_node, encoding)
        result.append(value)

    return tuple(result)
Beispiel #15
0
def _extractPermissionNodes(root, encoding=None):

    result = []

    for p_node in root.getElementsByTagName('permission'):

        result.append(_coalesceTextNodeChildren(p_node, encoding))

    return result
Beispiel #16
0
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 )
           }
Beispiel #17
0
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 )
           }
Beispiel #18
0
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
Beispiel #19
0
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
Beispiel #20
0
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