diff --git a/requirements.txt b/requirements.txt index 0799221f..c22d2613 100644 --- a/requirements.txt +++ b/requirements.txt @@ -14,3 +14,4 @@ scikit-learn==1.6.1 jsonschema==4.23.0 networkx==3.4.2 pydantic==2.10.6 +semver==3.0.2 \ No newline at end of file diff --git a/src/ssvc/_mixins.py b/src/ssvc/_mixins.py index 6eb4c507..414c99e1 100644 --- a/src/ssvc/_mixins.py +++ b/src/ssvc/_mixins.py @@ -17,7 +17,8 @@ from typing import Optional -from pydantic import BaseModel, ConfigDict +from pydantic import BaseModel, ConfigDict, field_validator +from semver import Version from . import _schemaVersion @@ -30,6 +31,23 @@ class _Versioned(BaseModel): version: str = "0.0.0" schemaVersion: str = _schemaVersion + @field_validator("version") + @classmethod + def validate_version(cls, value): + """ + Validate the version field. + Args: + value: a string representing a version number + + Returns: + a fully qualified version number + + Raises: + ValueError: if the value is not a valid version number + """ + version = Version.parse(value, optional_minor_and_patch=True) + return version.__str__() + class _Namespaced(BaseModel): """