diff --git a/nomenclature/codelist.py b/nomenclature/codelist.py index 2824dffe..f929b67f 100644 --- a/nomenclature/codelist.py +++ b/nomenclature/codelist.py @@ -342,13 +342,16 @@ def check_illegal_characters(self, config: NomenclatureConfig) -> Dict[str, Code if config.check_illegal_characters else ["{", "}"] ) + errors = ErrorCollector() def _check_string(value): if isinstance(value, str): if any(char in value for char in illegal): - raise ValueError( - f"Unexpected character in {self.name}: '{code.name}'." - " Check for illegal characters and/or if tags were spelled correctly." + errors.append( + ValueError( + f"Unexpected character in {self.name}: '{code.name}'." + " Check for illegal characters and/or if tags were spelled correctly." + ) ) elif isinstance(value, dict): for k in value.keys(): @@ -361,10 +364,10 @@ def _check_string(value): for code in self.mapping.values(): if not code.repository: - for attr in code.model_fields: - if attr != "file": - value = getattr(code, attr) - _check_string(value) + for value in code.model_dump(exclude="file").values(): + _check_string(value) + if errors: + raise ValueError(errors) def to_yaml(self, path=None): """Write mapping to yaml file or return as stream diff --git a/tests/data/codelist/illegal_chars/char_in_external_repo/common-definitions b/tests/data/codelist/illegal_chars/char_in_external_repo/common-definitions new file mode 160000 index 00000000..3b75bb94 --- /dev/null +++ b/tests/data/codelist/illegal_chars/char_in_external_repo/common-definitions @@ -0,0 +1 @@ +Subproject commit 3b75bb946658e55affe4108ddcaac281058832cd