From 681cdc096ab33ffb6f9fec434a7dbc64d0786d2d Mon Sep 17 00:00:00 2001 From: Alex Lowe Date: Fri, 11 Oct 2024 15:30:52 -0400 Subject: [PATCH] fix(charm-libs): better error message on bad version type --- charmcraft/models/project.py | 5 +++-- tests/unit/models/test_project.py | 9 +++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/charmcraft/models/project.py b/charmcraft/models/project.py index 9930b612a..e581b7831 100644 --- a/charmcraft/models/project.py +++ b/charmcraft/models/project.py @@ -91,6 +91,7 @@ class CharmLib(models.CraftBaseModel): version: str = pydantic.Field( title="Version filter for the charm. Either an API version or a specific [api].[patch].", pattern=r"[0-9]+(\.[0-9]+)?", + coerce_numbers_to_str=False, ) @pydantic.field_validator("lib", mode="before") @@ -122,12 +123,12 @@ def _validate_api_version(cls, value: str) -> str: int(api) except ValueError: raise ValueError(f"API version not valid. Expected an integer, got {api!r}") from None - return str(value) + return value @pydantic.field_validator("version", mode="before") def _validate_patch_version(cls, value: str) -> str: """Validate the optional patch version, providing a useful error message.""" - api, separator, patch = value.partition(".") + api, separator, patch = str(value).partition(".") if not separator: return value try: diff --git a/tests/unit/models/test_project.py b/tests/unit/models/test_project.py index 166979025..a05596d6e 100644 --- a/tests/unit/models/test_project.py +++ b/tests/unit/models/test_project.py @@ -345,6 +345,15 @@ def test_invalid_patch_version(version: str): project.CharmLib(lib="charm_name.lib_name", version=version) +@pytest.mark.parametrize("version", [1, 1.1]) +def test_bad_version_type(version: str): + with pytest.raises( + pydantic.ValidationError, + match="1 validation error for CharmLib\nversion\n Input should be a valid string", + ): + project.CharmLib(lib="charm_name.lib_name", version=version) + + @pytest.mark.parametrize( ("run_on", "expected"), [