def test_output_generator_csv_02(self, opml_filename, output_filename,
                                     json_dns_file, row, col, expected_result):
        """
        Creates csv file from outline using JSON data node specifier.

        :param opml_filename:
        :param output_filename:
        :param row:
        :param col:
        :param expected_result:
        :return:
        """
        test_data_file = os.path.join(input_files_root, "output_generator",
                                      opml_filename)

        test_csv_output_path = os.path.join(output_files_root,
                                            "output_generator",
                                            output_filename)

        data_node_descriptor_file = os.path.join(input_files_root,
                                                 "data_node_descriptor",
                                                 json_dns_file)

        outline = Outline.from_opml(test_data_file)
        unleashed_outline = UnleashedOutline(
            outline, default_text_tag_delimiter=['[*', '*]'])

        data_nodes = unleashed_outline.extract_data_nodes()
        data_node_name = data_nodes[0]['data_node_name']

        self.assertEqual('data_node_01', data_node_name)

        data_node_list_index = data_nodes[0]['data_node_list_index']
        data_node = unleashed_outline.list_unleashed_nodes(
        )[data_node_list_index].node()

        data_node_descriptor = DataNodeSpecifier.from_json_file(
            data_node_descriptor_file)

        data_table = data_node_descriptor.extract_data_node_dispatch(data_node)

        CsvOutputGenerator.create_csv_file(data_table, test_csv_output_path)

        result_checker = CsvTestChecker(test_csv_output_path)
        self.assertTrue(result_checker.check(row, col, expected_result))
Exemplo n.º 2
0
def main():
    num_arguments = len(sys.argv)
    expected_num_arguments = 3  # Note command line arguments will be one more as filename is first

    opml_path = ""
    json_path = ""
    csv_path = ""

    if num_arguments == 1:
        # Temporary hack to allow debugging. No parameters supplied --> use test files.
        print("Debug mode - hard coded arguments for command line")

        opml_path = "tests/test_resources/opml_data_extraction_test_01.opml"
        json_path = "tests/test_resources/custom_json_test_descriptors_risk_01.json"
        csv_path = "tests/test_resources/output_files/opml_data_extraction_test_01.csv"
    elif num_arguments != expected_num_arguments + 1:
        print(f"Wrong number of arguments ({num_arguments - 1} (should be {expected_num_arguments})")
    else:
        opml_path = sys.argv[1]
        json_path = sys.argv[2]
        csv_path = sys.argv[3]

    outline = Outline.from_opml(opml_path)
    print("Successfully read outline, unleashing...")

    unleashed_outline = UnleashedOutline(outline)
    data_nodes = unleashed_outline.extract_data_nodes()
    print(f"Outline is unleashed, there are {len(data_nodes)} data nodes in this outline")
    for index, node in enumerate(data_nodes):
        print(f"{index}: {node['data_node_name']}")

    print("Processing first node")

    data_node_list_index = data_nodes[0]['data_node_list_index']
    data_node = unleashed_outline.list_unleashed_nodes()[data_node_list_index].node()

    data_node_specifier = DataNodeSpecifier.from_json_file(json_path)
    extracted_data_table = data_node_specifier.extract_data_node_dispatch(data_node)

    CsvOutputGenerator.create_csv_file(extracted_data_table, csv_path)