From a59e296a324d94c3b1618502118a573b20f90081 Mon Sep 17 00:00:00 2001 From: DominicOram Date: Thu, 17 Oct 2024 14:57:28 +0100 Subject: [PATCH 1/2] Use in-built type for parameter version --- .../hyperion/parameters/components.py | 27 +++++-------------- 1 file changed, 7 insertions(+), 20 deletions(-) diff --git a/src/mx_bluesky/hyperion/parameters/components.py b/src/mx_bluesky/hyperion/parameters/components.py index e0b092a64..e933283b6 100644 --- a/src/mx_bluesky/hyperion/parameters/components.py +++ b/src/mx_bluesky/hyperion/parameters/components.py @@ -16,10 +16,10 @@ BaseModel, ConfigDict, Field, - field_serializer, field_validator, model_validator, ) +from pydantic_extra_types.semantic_version import SemanticVersion from scanspec.core import AxesPoints from semver import Version @@ -29,15 +29,7 @@ T = TypeVar("T") -class ParameterVersion(Version): - @classmethod - def _parse(cls, version): - if isinstance(version, cls): - return version - return cls.parse(version) - - -PARAMETER_VERSION = ParameterVersion.parse("5.1.0") +PARAMETER_VERSION = Version.parse("5.1.0") class RotationAxis(StrEnum): @@ -108,21 +100,16 @@ def __hash__(self) -> int: return self.json().__hash__() features: FeatureFlags = Field(default=FeatureFlags()) - parameter_model_version: ParameterVersion - - @field_serializer("parameter_model_version") - def serialize_parameter_version(self, version: ParameterVersion): - return str(version) + parameter_model_version: SemanticVersion - @field_validator("parameter_model_version", mode="before") + @field_validator("parameter_model_version") @classmethod - def _validate_version(cls, version_str: str): - version = ParameterVersion.parse(version_str) + def _validate_version(cls, version: Version): assert ( - version >= ParameterVersion(major=PARAMETER_VERSION.major) + version >= Version(major=PARAMETER_VERSION.major) ), f"Parameter version too old! This version of hyperion uses {PARAMETER_VERSION}" assert ( - version <= ParameterVersion(major=PARAMETER_VERSION.major + 1) + version <= Version(major=PARAMETER_VERSION.major + 1) ), f"Parameter version too new! This version of hyperion uses {PARAMETER_VERSION}" return version From 11b7a1bacdbecaf6cb7e8facd345db255338b1a2 Mon Sep 17 00:00:00 2001 From: DominicOram Date: Thu, 17 Oct 2024 15:00:33 +0100 Subject: [PATCH 2/2] Add extra types for pydantic --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index c5bf14a11..ed91df2f1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -29,6 +29,7 @@ dependencies = [ "opentelemetry-distro", "opentelemetry-exporter-otlp", "pydantic", + "pydantic-extra-types", "pyepics", "pyzmq", "requests",