diff --git a/src/infrasys/base_quantity.py b/src/infrasys/base_quantity.py index c0f1b86..5a3d9b4 100644 --- a/src/infrasys/base_quantity.py +++ b/src/infrasys/base_quantity.py @@ -19,7 +19,7 @@ class BaseQuantity(ureg.Quantity): # type: ignore __base_unit__ = None - def __init_subclass__(cls, **kwargs) -> None: + def __init_subclass__(cls, **kwargs): if not cls.__base_unit__: raise TypeError("__base_unit__ should be defined") super().__init_subclass__(**kwargs) @@ -44,23 +44,23 @@ def __get_pydantic_core_schema__( # Required for pydantic validation @classmethod - def validate(cls, value, *_): + def validate(cls, value, *_) -> "BaseQuantity": if isinstance(value, BaseQuantity): if cls.__base_unit__: assert value.check( cls.__base_unit__ ), f"Unit must be compatible with {cls.__base_unit__}" - return value + return cls(value) if isinstance(value, pint.Quantity): if cls.__base_unit__: assert value.check( cls.__base_unit__ ), f"Unit must be compatible with {cls.__base_unit__}" - return value + return cls(value.magnitude, value.units) else: raise ValueError(f"Invalid type for BaseQuantity: {type(value)}") if isinstance(value, cls): - return value + return cls(value) return value @staticmethod diff --git a/src/infrasys/system.py b/src/infrasys/system.py index 25a0e80..0e1a1fc 100644 --- a/src/infrasys/system.py +++ b/src/infrasys/system.py @@ -1064,7 +1064,6 @@ def _deserialize_fields( values[field] = composed_value elif isinstance(metadata.fields, SerializedQuantityType): quantity_type = cached_types.get_type(metadata.fields) - # values[field] = quantity_type.from_dict(value) values[field] = quantity_type(value=value["value"], units=value["units"]) else: msg = f"Bug: unhandled type: {field=} {value=}"