Skip to content

Commit 352a8e8

Browse files
committed
optimize query_by_pair to resolve pangenome_analysis from genome_id
1 parent caf37e3 commit 352a8e8

2 files changed

Lines changed: 19 additions & 17 deletions

File tree

gene_function/models.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,16 @@ def get_by_genome_ids(genome_ids, projection=None):
250250

251251
return list(cursor)
252252

253+
def get_pangenome_analysis_by_genome_ids(genome_ids):
254+
"""
255+
Return a dict mapping genome_id -> pangenome_analysis.
256+
"""
257+
cursor = GenomeInfo.objects.find(
258+
{"genome_id": {"$in": genome_ids}},
259+
projection={"_id": 0, "genome_id": 1, "pangenome_analysis": 1}
260+
)
261+
return {doc["genome_id"]: doc["pangenome_analysis"] for doc in cursor}
262+
253263
def get_genome_and_isolation_info(genome_match, projection=None):
254264
pipeline = GenomeInfo.get_genome_and_isolation_info_pipeline(genome_match)
255265
if isinstance(projection, list):

interop_query/views.py

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -293,26 +293,18 @@ def query_by_pair(request):
293293
status=status.HTTP_400_BAD_REQUEST,
294294
})
295295

296-
genes = {p["gene"] for p in clean_pairs}
297-
298-
try:
299-
ga_pairs = GeneAnnotations.get_gene_analysis_pairs(list(genes))
300-
gene_to_analyses = {}
301-
for g, a in ga_pairs:
302-
gene_to_analyses.setdefault(g, set()).add(a)
303-
except GeneAnnotations.NotFound:
304-
return Response([])
296+
genome_ids = list({p["genome_id"] for p in clean_pairs})
297+
genome_to_analysis = GenomeInfo.get_pangenome_analysis_by_genome_ids(genome_ids)
305298

306299
query = []
307300
for p in clean_pairs:
308-
analyses = gene_to_analyses.get(p["gene"])
309-
if analyses:
310-
for analysis in analyses:
311-
query.append({
312-
"gene": p["gene"],
313-
"pangenome_analysis": analysis,
314-
"genome_id": p["genome_id"],
315-
})
301+
analysis = genome_to_analysis.get(p["genome_id"])
302+
if analysis:
303+
query.append({
304+
"gene": p["gene"],
305+
"pangenome_analysis": analysis,
306+
"genome_id": p["genome_id"],
307+
})
316308

317309
if not query:
318310
return Response([])

0 commit comments

Comments
 (0)