diff --git a/src/caosadvancedtools/table_json_conversion/fill_xlsx.py b/src/caosadvancedtools/table_json_conversion/fill_xlsx.py index 8c9bba804b292f1cb986f60921145303ebb23bed..ec381ec7c23dc39405732c326f1db87e168e160f 100644 --- a/src/caosadvancedtools/table_json_conversion/fill_xlsx.py +++ b/src/caosadvancedtools/table_json_conversion/fill_xlsx.py @@ -57,6 +57,14 @@ def _get_column_types(sheet: Worksheet) -> OrderedDict: return result +def _get_deep_value(data: Dict[str, Any], path: List[str]): + """Return the value at ``path`` inside the dict ``data``. + """ + if len(path) > 1: + return _get_deep_value(data[path[0]], path[1:]) + return data[path[0]] + + def _get_foreign_key_columns(sheet: Worksheet) -> Dict[str, SimpleNamespace]: """Return the foreign keys of the worksheet. @@ -84,14 +92,6 @@ out: dict[str, SimpleNamespace] return result -def _get_deep_value(data: Dict[str, Any], path: List[str]): - """Return the value at ``path`` inside the dict ``data``. - """ - if len(path) > 1: - return _get_deep_value(data[path.pop(0)], path) - return data[path[0]] - - def _get_row_type_column_index(sheet: Worksheet): """Return the column index (0-indexed) of the column which defines the row types. """ @@ -135,7 +135,7 @@ class TemplateFiller: def fill_data(self, data: dict): """Fill the data into the workbook.""" self._context = data - self._handle_data(data=data, current_path=[]) + self._handle_data(data=data) self._context = None def _create_index(self): diff --git a/unittests/table_json_conversion/create_jsonschema.py b/unittests/table_json_conversion/create_jsonschema.py index 61e4eb20964932d4e50b766868137b3538f7c26d..07264649728f34d9ee6090ed171b5ec151672baf 100755 --- a/unittests/table_json_conversion/create_jsonschema.py +++ b/unittests/table_json_conversion/create_jsonschema.py @@ -63,10 +63,10 @@ def _parse_arguments(): def main(): """The main function of this script.""" _ = _parse_arguments() - prepare_datamodel("model_simple.yml", ["Training", "Person"], "model_schema.json", + prepare_datamodel("data/simple_model.yml", ["Training", "Person"], "data/simple_schema.json", do_not_create=["Organisation"]) - prepare_datamodel("model_multiple_refs.yml", ["Training", "Person"], - "schema_multiple_refs.json") + prepare_datamodel("data/multiple_refs_model.yml", ["Training", "Person"], + "data/multiple_refs_schema.json") if __name__ == "__main__": diff --git a/unittests/table_json_conversion/model_multiple_refs.yml b/unittests/table_json_conversion/data/multiple_refs_model.yml similarity index 100% rename from unittests/table_json_conversion/model_multiple_refs.yml rename to unittests/table_json_conversion/data/multiple_refs_model.yml diff --git a/unittests/table_json_conversion/schema_multiple_refs.json b/unittests/table_json_conversion/data/multiple_refs_schema.json similarity index 100% rename from unittests/table_json_conversion/schema_multiple_refs.json rename to unittests/table_json_conversion/data/multiple_refs_schema.json diff --git a/unittests/table_json_conversion/multiple_refs.xlsx b/unittests/table_json_conversion/data/multiple_refs_template.xlsx similarity index 100% rename from unittests/table_json_conversion/multiple_refs.xlsx rename to unittests/table_json_conversion/data/multiple_refs_template.xlsx diff --git a/unittests/table_json_conversion/example.json b/unittests/table_json_conversion/data/simple_data.json similarity index 100% rename from unittests/table_json_conversion/example.json rename to unittests/table_json_conversion/data/simple_data.json diff --git a/unittests/table_json_conversion/example_single_data.xlsx b/unittests/table_json_conversion/data/simple_data.xlsx similarity index 100% rename from unittests/table_json_conversion/example_single_data.xlsx rename to unittests/table_json_conversion/data/simple_data.xlsx diff --git a/unittests/table_json_conversion/model_simple.yml b/unittests/table_json_conversion/data/simple_model.yml similarity index 100% rename from unittests/table_json_conversion/model_simple.yml rename to unittests/table_json_conversion/data/simple_model.yml diff --git a/unittests/table_json_conversion/model_schema.json b/unittests/table_json_conversion/data/simple_schema.json similarity index 100% rename from unittests/table_json_conversion/model_schema.json rename to unittests/table_json_conversion/data/simple_schema.json diff --git a/unittests/table_json_conversion/example_template.xlsx b/unittests/table_json_conversion/data/simple_template.xlsx similarity index 100% rename from unittests/table_json_conversion/example_template.xlsx rename to unittests/table_json_conversion/data/simple_template.xlsx diff --git a/unittests/table_json_conversion/example_single.json b/unittests/table_json_conversion/example_single.json deleted file mode 100644 index 9997f17e76a46d5e97d842fdee40626047e7a347..0000000000000000000000000000000000000000 --- a/unittests/table_json_conversion/example_single.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "Training": { - "date": "2023-01-01", - "url": "www.indiscale.com", - "coach": [ - { - "family_name": "Sky", - "given_name": "Max", - "Organisation": "ECB" - }, - { - "family_name": "Sky", - "given_name": "Min", - "Organisation": "ECB" - } - ], - "supervisor": { - "family_name": "Steve", - "given_name": "Stevie", - "Organisation": "IMF" - }, - "duration": 1.0, - "participants": 1, - "subjects": ["Math", "Physics"], - "remote": false - }, - "Person": { - "family_name": "Steve", - "given_name": "Stevie", - "Organisation": "IMF" - } -} diff --git a/unittests/table_json_conversion/test_fill_xlsx.py b/unittests/table_json_conversion/test_fill_xlsx.py index 35f75703aa73eb2e6c2dc037f83cd7e174a9a244..5b45939aa5c44da71eb6f9467d6617251fbfd5a1 100644 --- a/unittests/table_json_conversion/test_fill_xlsx.py +++ b/unittests/table_json_conversion/test_fill_xlsx.py @@ -56,18 +56,20 @@ custom_output: str, optional assert os.path.exists(outfile) generated = load_workbook(outfile) # workbook can be read known_good_wb = load_workbook(known_good) - if custom_output is not None: - from IPython import embed - embed() + # if custom_output is not None: + # from IPython import embed + # embed() compare_workbooks(generated, known_good_wb) def test_detect(): - example = load_workbook(rfp("example_template.xlsx")) + example = load_workbook(rfp("data/simple_template.xlsx")) assert 0 == _get_row_type_column_index(example['Person']) assert [1, 2] == _get_path_rows(example['Person']) def test_fill_xlsx(): - fill_and_compare(json_file="example_single.json", template_file="example_template.xlsx", - known_good="example_single_data.xlsx") + fill_and_compare(json_file="data/simple_data.json", template_file="data/simple_template.xlsx", + known_good="data/simple_data.xlsx") + # fill_and_compare(json_file="data/example.json", template_file="data/example_template.xlsx", + # known_good="data/example_single_data.xlsx") diff --git a/unittests/table_json_conversion/test_table_template_generator.py b/unittests/table_json_conversion/test_table_template_generator.py index 5d05e2135eae2125c51bafb17b6d99e40f46e4c3..b7a2dafcca6f8e467b3bdc05f46adf333619e97b 100644 --- a/unittests/table_json_conversion/test_table_template_generator.py +++ b/unittests/table_json_conversion/test_table_template_generator.py @@ -140,7 +140,7 @@ def test_generate_sheets_from_schema(): assert tdef['name'] == (ColumnType.SCALAR, "The name of the Record to be created", ["Training", 'name']) # example case - with open(rfp("model_schema.json")) as sfi: + with open(rfp("data/simple_schema.json")) as sfi: schema = json.load(sfi) with pytest.raises(ValueError, match="A foreign key definition is missing.*"): generator._generate_sheets_from_schema(schema) @@ -197,7 +197,7 @@ def test_get_max_path_length(): def test_template_generator(): generated, _ = _compare_generated_to_known_good( - schema_file=rfp("model_schema.json"), known_good=rfp("example_template.xlsx"), + schema_file=rfp("data/simple_schema.json"), known_good=rfp("data/simple_template.xlsx"), foreign_keys={'Training': {"__this__": ['date', 'url']}}, outfile=None) # test some hidden @@ -230,7 +230,8 @@ def test_template_generator(): def test_model_with_multiple_refs(): _compare_generated_to_known_good( - schema_file=rfp("schema_multiple_refs.json"), known_good=rfp("multiple_refs.xlsx"), + schema_file=rfp("data/multiple_refs_schema.json"), + known_good=rfp("data/multiple_refs_template.xlsx"), foreign_keys={'Training': {"__this__": ['date', 'url'], "Organisation": ["name"]}}, outfile=None)