From 59058ab4713cd12f14a0ee9b9519d66c08998c88 Mon Sep 17 00:00:00 2001 From: Dan LaManna Date: Mon, 14 Sep 2026 08:44:06 -0400 Subject: [PATCH] Name the given image_type in incompatible field errors The rcm_case_id and dermoscopic_type checks reported a hardcoded image_type (RCM: macroscopic and dermoscopic, both valid values) instead of the value on the row, pointing users at the wrong field value. --- isic_metadata/metadata.py | 4 ++-- tests/test_dependent_fields.py | 19 +++++++++++++++---- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/isic_metadata/metadata.py b/isic_metadata/metadata.py index 30cd7fa..f9d1e83 100644 --- a/isic_metadata/metadata.py +++ b/isic_metadata/metadata.py @@ -411,7 +411,7 @@ def validate_rcm_fields(self, info: ValidationInfo) -> MetadataRow: ImageTypeEnum.rcm_mosaic, ]: raise _error_incompatible_fields( - "rcm_case_id", "image_type", field2_value=ImageTypeEnum.rcm_macroscopic + "rcm_case_id", "image_type", field2_value=self.image_type.value ) return self @@ -426,7 +426,7 @@ def validate_dermoscopic_fields(self) -> MetadataRow: if self.image_type != ImageTypeEnum.dermoscopic: raise _error_incompatible_fields( - "dermoscopic_type", "image_type", field2_value="dermoscopic" + "dermoscopic_type", "image_type", field2_value=self.image_type.value ) return self diff --git a/tests/test_dependent_fields.py b/tests/test_dependent_fields.py index b1c40aa..f6b901c 100644 --- a/tests/test_dependent_fields.py +++ b/tests/test_dependent_fields.py @@ -56,12 +56,14 @@ def test_dermoscopic_type_requires_image_type_dermoscopic() -> None: def test_dermoscopic_type_requires_dermoscopic_image_type() -> None: + row = {"dermoscopic_type": "contact polarized", "image_type": "clinical: overview"} with pytest.raises(ValidationError) as excinfo: - MetadataRow.model_validate( - {"dermoscopic_type": "contact polarized", "image_type": "clinical: overview"} - ) + MetadataRow.model_validate(row) assert len(excinfo.value.errors()) == 1 - assert "dermoscopic_type is incompatible with image_type" in excinfo.value.errors()[0]["msg"] + assert ( + f"dermoscopic_type is incompatible with image_type {row['image_type']}" + in excinfo.value.errors()[0]["msg"] + ) def test_rcm_case_id_requires_rcm_image_type() -> None: @@ -70,6 +72,15 @@ def test_rcm_case_id_requires_rcm_image_type() -> None: assert len(excinfo.value.errors()) == 1 assert "rcm_case_id requires setting image_type" in excinfo.value.errors()[0]["msg"] + row = {"rcm_case_id": "12345", "image_type": "dermoscopic"} + with pytest.raises(ValidationError) as excinfo: + MetadataRow.model_validate(row) + assert len(excinfo.value.errors()) == 1 + assert ( + f"rcm_case_id is incompatible with image_type {row['image_type']}" + in excinfo.value.errors()[0]["msg"] + ) + MetadataRow.model_validate({"rcm_case_id": "12345", "image_type": "RCM: tile"})