diff --git a/src/caosadvancedtools/table_json_conversion/convert.py b/src/caosadvancedtools/table_json_conversion/convert.py index 3bc255562f115963f84d207d37421c11f2243ef0..bffab78e175ae1291e7447186c356bfa39f2a5ef 100644 --- a/src/caosadvancedtools/table_json_conversion/convert.py +++ b/src/caosadvancedtools/table_json_conversion/convert.py @@ -186,7 +186,8 @@ class XLSXConverter: self._check_columns(fail_fast=strict) except KeyError as e: raise jsonschema.ValidationError(f"Malformed metadata: Cannot parse paths. " - f"Unknown path: {e}") from e + f"Unknown path: '{e.args[1]}' in sheet '{e.args[0]}'." + ) from e self._handled_sheets: set[str] = set() self._result: dict = {} self._errors: dict = {} @@ -270,8 +271,11 @@ class XLSXConverter: parents[xlsx_utils.p2s(col.path[:-1])] = col.path[:-1] col_paths.append(col.path) for path in parents.values(): - subschema = xlsx_utils.get_subschema(path, self._schema) - + try: + subschema = xlsx_utils.get_subschema(path, self._schema) + except KeyError as kerr: + kerr.args = (sheetname, *kerr.args) + raise # Unfortunately, there are a lot of special cases to handle here. if subschema.get("type") == "array": subschema = subschema["items"] @@ -544,9 +548,6 @@ def _group_foreign_paths(foreign: list[list], common: list[str]) -> list[SimpleN last_level = len(elem.path) resultlist.append(elem) - # from IPython import embed - # embed() - if last_level != len(common): raise ValueError("Foreign keys must cover the complete `common` depth.") return resultlist diff --git a/unittests/table_json_conversion/test_read_xlsx.py b/unittests/table_json_conversion/test_read_xlsx.py index f51e114f7ab526f0b366e48934dbb1f9573f1666..ac0a42b59478a57a1bf7ef53f4333e20c0358e76 100644 --- a/unittests/table_json_conversion/test_read_xlsx.py +++ b/unittests/table_json_conversion/test_read_xlsx.py @@ -153,7 +153,8 @@ def test_error_table(): with pytest.raises(jsonschema.ValidationError) as caught: convert.to_dict(xlsx=rfp("data/simple_data_broken_paths.xlsx"), schema=rfp("data/simple_schema.json")) - assert "Malformed metadata: Cannot parse paths" in str(caught.value) + assert ("Malformed metadata: Cannot parse paths. Unknown path: 'There' in sheet 'Person'." + == str(caught.value)) def test_additional_column():