Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 35 additions & 23 deletions api/resources/gaia.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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:
Expand Down
Loading