Skip to content

Commit db5b952

Browse files
committed
Fixed #336: Score ranges were persisting despite being removed from updated item
1 parent 2d1c953 commit db5b952

File tree

2 files changed

+18
-4
lines changed

2 files changed

+18
-4
lines changed

src/mavedb/routers/score_sets.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -732,6 +732,8 @@ async def update_score_set(
732732

733733
if item_update.score_ranges:
734734
item.score_ranges = item_update.score_ranges.dict()
735+
else:
736+
item.score_ranges = None
735737

736738
# Delete the old target gene, WT sequence, and reference map. These will be deleted when we set the score set's
737739
# target_gene to None, because we have set cascade='all,delete-orphan' on ScoreSet.target_gene. (Since the

src/mavedb/view_models/score_set.py

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,10 @@ def at_least_one_target_gene_exists(cls, field_value, values):
179179
return field_value
180180

181181
@validator("score_ranges")
182-
def score_range_labels_must_be_unique(cls, field_value: ScoreRanges):
182+
def score_range_labels_must_be_unique(cls, field_value: Optional[ScoreRanges]):
183+
if field_value is None:
184+
return None
185+
183186
existing_labels = []
184187
for i, range_model in enumerate(field_value.ranges):
185188
range_model.label = range_model.label.strip()
@@ -195,7 +198,10 @@ def score_range_labels_must_be_unique(cls, field_value: ScoreRanges):
195198
return field_value
196199

197200
@validator("score_ranges")
198-
def ranges_contain_normal_and_abnormal(cls, field_value: ScoreRanges):
201+
def ranges_contain_normal_and_abnormal(cls, field_value: Optional[ScoreRanges]):
202+
if field_value is None:
203+
return None
204+
199205
ranges = set([range_model.classification for range_model in field_value.ranges])
200206
if not set(default_ranges).issubset(ranges):
201207
raise ValidationError(
@@ -207,7 +213,7 @@ def ranges_contain_normal_and_abnormal(cls, field_value: ScoreRanges):
207213
return field_value
208214

209215
@validator("score_ranges")
210-
def ranges_do_not_overlap(cls, field_value: ScoreRanges):
216+
def ranges_do_not_overlap(cls, field_value: Optional[ScoreRanges]):
211217
def test_overlap(tp1, tp2) -> bool:
212218
# Always check the tuple with the lowest lower bound. If we do not check
213219
# overlaps in this manner, checking the overlap of (0,1) and (1,2) will
@@ -226,6 +232,9 @@ def test_overlap(tp1, tp2) -> bool:
226232

227233
return False
228234

235+
if field_value is None:
236+
return None
237+
229238
for i, range_test in enumerate(field_value.ranges):
230239
for range_check in list(field_value.ranges)[i + 1 :]:
231240
if test_overlap(range_test.range, range_check.range):
@@ -237,7 +246,10 @@ def test_overlap(tp1, tp2) -> bool:
237246
return field_value
238247

239248
@validator("score_ranges")
240-
def wild_type_score_in_normal_range(cls, field_value: ScoreRanges):
249+
def wild_type_score_in_normal_range(cls, field_value: Optional[ScoreRanges]):
250+
if field_value is None:
251+
return None
252+
241253
normal_ranges = [
242254
range_model.range for range_model in field_value.ranges if range_model.classification == "normal"
243255
]

0 commit comments

Comments
 (0)