Esempio n. 1
0
def read(xml_string):
    """ Read Oozie XML workflow definition

    Args:
        xml_string (string): Oozie XML

    Returns:
        OozieGraph
    """
    root = ET.fromstring(__remove_namespaces(xml_string))
    ignore_tags = ['global']
    independently_handled_tags = ['parameters']
    handlers_register = {
        'fork': handle_fork,
        'decision': handle_decision,
        'action': handle_action,
        'join': handle_join,
        'start': handle_start,
        'end': handle_end,
        'kill': handle_kill
    }

    nodes_register = {}
    parameters = {}
    for child in root:
        tag_name = child.tag
        if tag_name not in (list(handlers_register.keys()) +
                            independently_handled_tags + ignore_tags):
            raise Exception('tag "{}" encountered which is neither '
                            'ignored nor handled'.format(tag_name))
        if tag_name in ignore_tags:
            pass
        elif tag_name in independently_handled_tags:
            if tag_name == 'parameters':
                parameters = properties_to_dict(child)
        else:
            try:
                (name, node) = handlers_register[tag_name](child)
                nodes_register[name] = node
            except Exception:
                tag_string = ET.tostring(child, encoding='utf8', method='xml')
                print('Error occurred while analyzing tag "{}"'.format(
                    tag_string),
                      file=sys.stderr)
                raise
    return OozieGraph(parameters, nodes_register)
Esempio n. 2
0
def read(xml_string):
    """ Read Oozie XML workflow definition

    Args:
        xml_string (string): Oozie XML

    Returns:
        OozieGraph
    """
    root = ET.fromstring(__remove_namespaces(xml_string))
    ignore_tags = ['global']
    independently_handled_tags = ['parameters']
    handlers_register = {'fork': handle_fork,
                         'decision': handle_decision,
                         'action': handle_action,
                         'join': handle_join,
                         'start': handle_start,
                         'end': handle_end,
                         'kill': handle_kill}

    nodes_register = {}
    parameters = {}
    for child in root:
        tag_name = child.tag
        if tag_name not in (list(handlers_register.keys()) +
                            independently_handled_tags + ignore_tags):
            raise Exception('tag "{}" encountered which is neither '
                            'ignored nor handled'.format(tag_name))
        if tag_name in ignore_tags:
            pass
        elif tag_name in independently_handled_tags:
            if tag_name == 'parameters':
                parameters = properties_to_dict(child)
        else:
            try:
                (name, node) = handlers_register[tag_name](child)
                nodes_register[name] = node
            except Exception:
                tag_string = ET.tostring(child, encoding='utf8', method='xml')
                print('Error occurred while analyzing tag "{}"'.
                      format(tag_string), file=sys.stderr)
                raise
    return OozieGraph(parameters, nodes_register)
Esempio n. 3
0
def __get_configuration(action_elem):
    configuration = {}
    configuration_elem = action_elem.find('configuration')
    if configuration_elem is not None:
        configuration = properties_to_dict(configuration_elem)
    return configuration