From 6925ae4d2480c583c50cb308291fb8f156306fff Mon Sep 17 00:00:00 2001 From: asherpasha Date: Mon, 3 Nov 2025 15:27:48 -0500 Subject: [PATCH] More fixes. --- api/resources/gaia.py | 58 ++++++++++++++++++++++++++----------------- 1 file changed, 35 insertions(+), 23 deletions(-) diff --git a/api/resources/gaia.py b/api/resources/gaia.py index 4098a34..51ba417 100644 --- a/api/resources/gaia.py +++ b/api/resources/gaia.py @@ -19,24 +19,27 @@ def get(self, identifier=""): # Is it valid if BARUtils.is_gaia_alias(identifier): + query_ids = [] + data = [] # Check if alias exists # Note: This check can be done in on query, but optimizer is not using indexes for some reason - # Also, GAIA only uses the first result query = db.select(Aliases.genes_id, Aliases.alias).filter(Aliases.alias == identifier) - row = db.session.execute(query).fetchone() + rows = db.session.execute(query).fetchall() - if row: - # Alias exists. Get the genes_id - query_id = row.genes_id + if rows and len(rows) > 0: + # Alias exists. Get the genes_ids + for row in rows: + query_ids.append(row.genes_id) else: - # Alias doesn't exist. Get the genes_id if it's locus or ncbi id + # Alias doesn't exist. Get the ids if it's locus or ncbi id query = db.select(Genes.id).filter(or_(Genes.locus == identifier, Genes.geneid == identifier)) - row = db.session.execute(query).fetchone() + rows = db.session.execute(query).fetchall() - if row: - query_id = row.id + if rows and len(rows) > 0: + for row in rows: + query_ids.append(row.id) else: return BARUtils.error_exit("Nothing found"), 404 @@ -45,23 +48,32 @@ def get(self, identifier=""): db.select(Genes.species, Genes.locus, Genes.geneid, func.json_arrayagg(Aliases.alias).label("aliases")) .select_from(Genes) .outerjoin(Aliases, Aliases.genes_id == Genes.id) - .filter(Genes.id == query_id) + .filter(Genes.id.in_(query_ids)) + .group_by(Genes.species, Genes.locus, Genes.geneid) ) - result = db.session.execute(query).fetchone() + rows = db.session.execute(query).fetchall() - # See if aliases exists - if result.aliases: - aliases = json.loads(result.aliases) - else: - aliases = [] - - data = { - "species": result.species, - "locus": result.locus, - "geneid": result.geneid, - "aliases": aliases, - } + if rows and len(rows) > 0: + for row in rows: + + # JSONify aliases + if row.aliases: + aliases = json.loads(row.aliases) + else: + aliases = [] + + record = { + "species": row.species, + "locus": row.locus, + "geneid": row.geneid, + "aliases": aliases, + } + + # Add the record to data + data.append(record) + + # Return final data return BARUtils.success_exit(data) else: