Skip to content

Commit 37cccc4

Browse files
committed
don't fetch samples directly
1 parent 15914f4 commit 37cccc4

File tree

1 file changed

+8
-6
lines changed

1 file changed

+8
-6
lines changed

backend/fms_core/services/sample_lineage.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,18 +36,20 @@ def create_sample_lineage_graph(sampleId):
3636
errors.append(f"Sample with id ${sampleId} does not exist")
3737

3838
if not errors:
39-
derivedBySample = DerivedBySample.objects.filter(sample__id=sampleId) \
40-
.values_list("derived_sample__biosample_id", flat=True)
39+
biosampleIds = DerivedBySample.objects.filter(sample__id=sampleId) \
40+
.values_list("derived_sample__biosample_id", flat=True)
4141

42-
sampleIds = DerivedBySample.objects.filter(derived_sample__biosample__id__in=derivedBySample) \
43-
.values_list("sample__id", flat=True)
44-
samples = Sample.objects.filter(id__in=sampleIds)
42+
derivedBySamples = DerivedBySample.objects.filter(derived_sample__biosample__id__in=biosampleIds) \
43+
.annotate(name=F("sample__name")) \
44+
.annotate(quality_flag=F("sample__quality_flag")) \
45+
.annotate(quantity_flag=F("sample__quantity_flag")) \
4546

47+
sampleIds = derivedBySamples.values_list("sample__id", flat=True)
4648
process_measurements = ProcessMeasurement.objects.filter(source_sample__in=sampleIds) \
4749
.select_related("process__lineage").annotate(child_sample=F("lineage__child")) \
4850
.select_related("process_protocol").annotate(protocol_name=F("process__protocol__name"))
4951

50-
nodes = list(samples.values("id", "name", "quality_flag", "quantity_flag"))
52+
nodes = list(derivedBySamples.values("name", "quality_flag", "quantity_flag").annotate(id=F("sample_id")))
5153
edges = list(process_measurements.values("id", "source_sample", "child_sample", "protocol_name"))
5254

5355
return (nodes, edges, errors)

0 commit comments

Comments
 (0)