From 89db4a9337652493d4415dcce29386666ab4f3ae Mon Sep 17 00:00:00 2001 From: David Almeida Date: Thu, 10 Oct 2024 11:53:38 +0200 Subject: [PATCH] Change to 'before' validator to ensure list of str internally --- nomenclature/code.py | 7 ++++--- .../region_codelist/countries_attribute_str/region.yaml | 2 +- tests/test_codelist.py | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/nomenclature/code.py b/nomenclature/code.py index 2d6f1eab..47762ce3 100644 --- a/nomenclature/code.py +++ b/nomenclature/code.py @@ -243,13 +243,14 @@ class RegionCode(Code): """ hierarchy: str = None - countries: Optional[Union[List[str], str]] = None + countries: Optional[List[str]] = None iso3_codes: Optional[Union[List[str], str]] = None - @field_validator("countries") + @field_validator("countries", mode="before") def check_countries(cls, v: List[str], info: ValidationInfo) -> List[str]: """Verifies that each country name is defined in `nomenclature.countries`.""" - if invalid_country_names := set(to_list(v)) - set(countries.names): + v = to_list(v) + if invalid_country_names := set(v) - set(countries.names): raise ValueError( f"Region '{info.data['name']}' uses non-standard country name(s): " + ", ".join(invalid_country_names) diff --git a/tests/data/codelist/region_codelist/countries_attribute_str/region.yaml b/tests/data/codelist/region_codelist/countries_attribute_str/region.yaml index 0a564000..a59a7f6b 100644 --- a/tests/data/codelist/region_codelist/countries_attribute_str/region.yaml +++ b/tests/data/codelist/region_codelist/countries_attribute_str/region.yaml @@ -2,4 +2,4 @@ - World - countries: - Some region: - countries: Austria \ No newline at end of file + countries: Austria diff --git a/tests/test_codelist.py b/tests/test_codelist.py index 9e03fb22..a5c36428 100644 --- a/tests/test_codelist.py +++ b/tests/test_codelist.py @@ -178,7 +178,7 @@ def test_region_codelist_str_country_name(): "region", MODULE_TEST_DATA_DIR / "region_codelist" / "countries_attribute_str", ) - assert code["Some region"].countries == "Austria" + assert code["Some region"].countries == ["Austria"] def test_norway_as_str():