Skip to content

Commit bdbbb4d

Browse files
authored
Merge pull request #49 from ImageMarkup/deprecate-diagnosis-specific-fields
Deprecate nevus_type/mel_class/mel_type
2 parents 5a70422 + 3f48629 commit bdbbb4d

File tree

4 files changed

+9
-42
lines changed

4 files changed

+9
-42
lines changed

isic_metadata/metadata.py

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -370,26 +370,11 @@ def validate_no_benign_melanoma(self) -> MetadataRow:
370370

371371
return self
372372

373-
@model_validator(mode="after")
374-
def validate_non_nevus_diagnoses(self) -> MetadataRow:
375-
if not self.nevus_type:
376-
return self
377-
378-
if not self.diagnosis:
379-
raise error_missing_field("nevus_type", "diagnosis")
380-
381-
if not DiagnosisEnum.is_nevus(self.diagnosis):
382-
raise error_incompatible_fields("nevus_type", "diagnosis", field2_value=self.diagnosis)
383-
384-
return self
385-
386373
@model_validator(mode="after")
387374
def validate_melanoma_fields(self) -> MetadataRow:
388375
melanoma_fields: list[str] = [
389-
"mel_class",
390376
"mel_mitotic_index",
391377
"mel_thick_mm",
392-
"mel_type",
393378
"mel_ulcer",
394379
]
395380

tests/test_dependent_fields.py

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -23,25 +23,12 @@ def test_diagnosis_no_malignant_nevus(benign_malignant: str):
2323
assert " is incompatible with benign_malignant" in excinfo.value.errors()[0]["msg"]
2424

2525

26-
@pytest.mark.parametrize(
27-
("diagnosis", "error_message"),
28-
[(None, "requires setting diagnosis"), ("Melanoma Invasive", "is incompatible with diagnosis")],
29-
)
30-
def test_nevus_type_needs_nevus_diagnosis(diagnosis: str | None, error_message: str):
31-
with pytest.raises(ValidationError) as excinfo:
32-
MetadataRow.model_validate({"diagnosis": diagnosis, "nevus_type": "spitz"})
33-
assert len(excinfo.value.errors()) == 1
34-
assert f"nevus_type {error_message}" in excinfo.value.errors()[0]["msg"]
35-
36-
3726
@pytest.mark.parametrize("diagnosis", [None, "Basal cell carcinoma"])
3827
@pytest.mark.parametrize(
3928
("field_name", "field_value"),
4029
[
41-
("mel_class", "melanoma in situ"),
4230
("mel_mitotic_index", "4/mm^2"),
4331
("mel_thick_mm", "4mm"),
44-
("mel_type", "nodular melanoma"),
4532
("mel_ulcer", True),
4633
],
4734
)

tests/test_fields.py

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ def test_non_str_types(
3737

3838
@pytest.mark.parametrize(("emptyish_value"), ["", " ", "\t", None])
3939
def test_empty_fields_are_omitted(emptyish_value: Any):
40-
metadata = MetadataRow.model_validate({"diagnosis": "Benign", "mel_type": emptyish_value})
40+
metadata = MetadataRow.model_validate({"diagnosis": "Benign", "mel_ulcer": emptyish_value})
4141
assert metadata.diagnosis == "Benign"
4242
assert metadata.mel_thick_mm is None
4343

@@ -51,13 +51,13 @@ def test_unstructured_fields():
5151
@pytest.mark.parametrize(("melanoma_diagnosis"), DiagnosisEnum._melanoma_diagnoses())
5252
def test_melanoma_fields(melanoma_diagnosis: str):
5353
with pytest.raises(ValidationError) as excinfo:
54-
# mel_class can only be set if diagnosis is melanoma
55-
MetadataRow.model_validate({"diagnosis": "Benign", "mel_class": "invasive melanoma"})
54+
# mel_ulcer can only be set if diagnosis is melanoma
55+
MetadataRow.model_validate({"diagnosis": "Benign", "mel_ulcer": True})
5656
assert len(excinfo.value.errors()) == 1
57-
assert "mel_class is incompatible with diagnosis" in excinfo.value.errors()[0]["msg"]
57+
assert "mel_ulcer is incompatible with diagnosis" in excinfo.value.errors()[0]["msg"]
5858

59-
# mel_class can only be set if diagnosis is melanoma
60-
MetadataRow.model_validate({"diagnosis": melanoma_diagnosis, "mel_class": "invasive melanoma"})
59+
# mel_ulcer can only be set if diagnosis is melanoma
60+
MetadataRow.model_validate({"diagnosis": melanoma_diagnosis, "mel_ulcer": True})
6161

6262

6363
@given(age=st.integers(min_value=0).map(str))
@@ -79,11 +79,6 @@ def test_benign_malignant():
7979
MetadataRow.model_validate({"benign_malignant": "benign"})
8080

8181

82-
@pytest.mark.parametrize(("nevus_diagnosis"), DiagnosisEnum._nevus_diagnoses())
83-
def test_nevus_diagnosis(nevus_diagnosis: str):
84-
MetadataRow.model_validate({"diagnosis": nevus_diagnosis, "nevus_type": "blue"})
85-
86-
8782
@pytest.mark.parametrize(
8883
("raw", "parsed"),
8984
[

tests/test_hierarchical_diagnosis.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,15 +52,15 @@ def test_single_value_diagnosis_is_favored():
5252
with pytest.raises(ValidationError) as excinfo:
5353
MetadataRow.model_validate(
5454
{
55-
"diagnosis": "Melanoma Invasive",
56-
"nevus_type": "blue",
55+
"diagnosis": "Fibroma, Sclerotic",
56+
"mel_ulcer": True,
5757
# these should be ignored
5858
"diagnosis_1": "Benign",
5959
"diagnosis_2": "Benign melanocytic proliferations",
6060
"diagnosis_3": "Nevus",
6161
}
6262
)
63-
assert "Setting nevus_type is incompatible with diagnosis" in excinfo.value.errors()[0]["msg"]
63+
assert "Setting mel_ulcer is incompatible with diagnosis" in excinfo.value.errors()[0]["msg"]
6464

6565

6666
def test_diagnosis_multiple_levels_is_coerced():

0 commit comments

Comments
 (0)