def check(yaml_file_path): graph1 = OozieGraph.from_yaml_dump( read_as_string(__name__, yaml_file_path)) yaml_str1 = graph1.to_yaml_dump() graph2 = OozieGraph.from_yaml_dump(yaml_str1) yaml_str2 = graph2.to_yaml_dump() assert yaml_str1 == yaml_str2 assert graph1 == graph2
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)
def convert_oozie_yaml_to_pipeline(oozie_workflow_file_path): oozie_yaml = read_as_string(__name__, oozie_workflow_file_path) oozie_graph = OozieGraph.from_yaml_dump(oozie_yaml) pipeline = convert(oozie_graph, IISPipelineConverter()) return pipeline
def check(oozie_workflow_file_path, expected_pipeline_file_path): oozie_workflow = read_as_string(__name__, oozie_workflow_file_path) actual = vipe.oozie.reader.reader.read(oozie_workflow) expected_yaml = read_as_string(__name__, expected_pipeline_file_path) expected = OozieGraph.from_yaml_dump(expected_yaml) assert expected == actual