From b9a05adac74bc8e5757049de9db22872c6e343e6 Mon Sep 17 00:00:00 2001 From: Alex Lowe Date: Wed, 11 Dec 2024 14:40:42 -0500 Subject: [PATCH] fix: charmlib typing --- charmcraft/models/project.py | 7 +++++-- tests/unit/models/test_project.py | 4 ++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/charmcraft/models/project.py b/charmcraft/models/project.py index 368cd7194..119fc2e68 100644 --- a/charmcraft/models/project.py +++ b/charmcraft/models/project.py @@ -92,6 +92,7 @@ class CharmLib(models.CraftBaseModel): 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, + strict=True, ) @pydantic.field_validator("lib", mode="before") @@ -128,9 +129,11 @@ def _validate_api_version(cls, value: str) -> str: return str(value) @pydantic.field_validator("version", mode="before") - def _validate_patch_version(cls, value: str) -> str: + def _validate_patch_version(cls, value: str | float) -> str: """Validate the optional patch version, providing a useful error message.""" - api, separator, patch = str(value).partition(".") + if not isinstance(value, str): + raise ValueError("Input should be a valid string") # noqa: TRY004 + api, separator, patch = 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 fe6781a11..a04da9fea 100644 --- a/tests/unit/models/test_project.py +++ b/tests/unit/models/test_project.py @@ -360,10 +360,10 @@ def test_invalid_patch_version(version: str): @pytest.mark.parametrize("version", [1, 1.1]) -def test_bad_version_type(version: str): +def test_bad_version_type(version: Any): with pytest.raises( pydantic.ValidationError, - match="1 validation error for CharmLib\nversion\n Input should be a valid string", + match="1 validation error for CharmLib\nversion\n.+Input should be a valid string", ): project.CharmLib(lib="charm_name.lib_name", version=version)