Skip to content

Commit 83c751c

Browse files
committed
Make score range classification options literal strings
1 parent acf5a6a commit 83c751c

File tree

3 files changed

+4
-21
lines changed

3 files changed

+4
-21
lines changed

src/mavedb/lib/validation/constants/score_set.py

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/mavedb/view_models/score_set.py

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,14 @@
22
from __future__ import annotations
33

44
from datetime import date
5-
from typing import Any, Collection, Dict, Optional, Sequence
5+
from typing import Any, Collection, Dict, Optional, Sequence, Literal
66

77
from humps import camelize
88
from pydantic import root_validator
99

1010
from mavedb.lib.validation import urn_re
11-
from mavedb.lib.validation.constants.score_set import default_ranges
1211
from mavedb.lib.validation.exceptions import ValidationError
1312
from mavedb.lib.validation.utilities import inf_or_float, is_null
14-
from mavedb.lib.utils import sanitize_string
1513
from mavedb.models.enums.mapping_state import MappingState
1614
from mavedb.models.enums.processing_state import ProcessingState
1715
from mavedb.view_models import PublicationIdentifiersGetter, record_type_validator, set_record_type
@@ -56,23 +54,13 @@ class Config:
5654
class ScoreRange(BaseModel):
5755
label: str
5856
description: Optional[str]
59-
classification: str
57+
classification: Literal["normal", "abnormal", "not_specified"]
6058
# Purposefully vague type hint because of some odd JSON Schema generation behavior.
6159
# Typing this as tuple[Union[float, None], Union[float, None]] will generate an invalid
6260
# jsonschema, and fail all tests that access the schema. This may be fixed in pydantic v2,
6361
# but it's unclear. Even just typing it as Tuple[Any, Any] will generate an invalid schema!
6462
range: list[Any] # really: tuple[Union[float, None], Union[float, None]]
6563

66-
@validator("classification")
67-
def range_classification_value_is_accepted(cls, field_value: str):
68-
classification = sanitize_string(field_value)
69-
if classification not in default_ranges:
70-
raise ValidationError(
71-
f"Unexpected classification value(s): {classification}. Permitted values: {default_ranges}"
72-
)
73-
74-
return classification
75-
7664
@validator("range")
7765
def ranges_are_not_backwards(cls, field_value: tuple[Any]):
7866
if len(field_value) != 2:

tests/view_models/test_score_set.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import pytest
22
from fastapi.encoders import jsonable_encoder
33

4-
from mavedb.lib.validation.constants.score_set import default_ranges
54
from mavedb.view_models.publication_identifier import PublicationIdentifierCreate
65
from mavedb.view_models.score_set import ScoreSetCreate, ScoreSetModify
76
from mavedb.view_models.target_gene import TargetGeneCreate
@@ -483,13 +482,10 @@ def test_cannot_create_score_set_without_default_ranges():
483482
with pytest.raises(ValueError) as exc_info:
484483
ScoreSetModify(**jsonable_encoder(score_set_test))
485484

486-
assert (
487-
"Unexpected classification value(s): other. Permitted values: ['normal', 'abnormal', 'not_specified']"
488-
in str(exc_info.value)
489-
)
485+
assert "unexpected value; permitted: 'normal', 'abnormal', 'not_specified'" in str(exc_info.value)
490486

491487

492-
@pytest.mark.parametrize("classification", default_ranges)
488+
@pytest.mark.parametrize("classification", ["normal", "abnormal", "not_specified"])
493489
def test_can_create_score_set_with_any_range_classification(classification):
494490
wt_score = -0.5 if classification == "normal" else None
495491
score_set_test = TEST_MINIMAL_SEQ_SCORESET.copy()

0 commit comments

Comments
 (0)