From 38868d54954fe447001a1980c10645c5041435d4 Mon Sep 17 00:00:00 2001 From: Philip Hackstock <20710924+phackstock@users.noreply.github.com> Date: Fri, 20 Dec 2024 13:40:21 +0100 Subject: [PATCH] Fix pydantic validator --- nomenclature/code.py | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/nomenclature/code.py b/nomenclature/code.py index fd0caf64..415b308f 100644 --- a/nomenclature/code.py +++ b/nomenclature/code.py @@ -3,20 +3,21 @@ from keyword import iskeyword from pathlib import Path from typing import Any + +from pyam.utils import to_list from pydantic import ( - field_validator, - field_serializer, - model_validator, - ConfigDict, BaseModel, + ConfigDict, Field, ValidationInfo, + field_serializer, + field_validator, + model_validator, ) +from typing_extensions import Self from nomenclature.error import ErrorCollector -from pyam.utils import to_list - from .countries import countries @@ -210,11 +211,12 @@ def convert_none_to_empty_string(cls, v): return v if v is not None else "" @model_validator(mode="after") - def wildcard_must_skip_region_aggregation(cls, data): - if "*" in data.name and data.skip_region_aggregation is False: + def wildcard_must_skip_region_aggregation(self) -> Self: + if self.is_wildcard and self.skip_region_aggregation is False: raise ValueError( - f"Wildcard variable '{data.name}' must skip region aggregation" + f"Wildcard variable '{self.name}' must skip region aggregation" ) + return self @field_validator("components", mode="before") def cast_variable_components_args(cls, v): @@ -232,6 +234,10 @@ def cast_variable_components_args(cls, v): def convert_str_to_none_for_writing(self, v): return v if v != "" else None + @property + def is_wildcard(self) -> bool: + return "*" in self.name + @property def units(self) -> list[str]: return self.unit if isinstance(self.unit, list) else [self.unit]