aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzsloan2019-11-05 13:27:46 -0600
committerzsloan2019-11-05 13:27:46 -0600
commit1880d9333875d0fc80a5fdb15c77c5cf11bb04b9 (patch)
tree575544a7557e02cbcd8a1806b76a0e05e952d587
parent2a4972137fde9a94fcaf59fc1a64a816d0a72f50 (diff)
downloadgenenetwork2-1880d9333875d0fc80a5fdb15c77c5cf11bb04b9.tar.gz
Changed the way aliases are fetched for search to do just one REST call
-rw-r--r--wqflask/wqflask/do_search.py28
-rw-r--r--wqflask/wqflask/search_results.py146
2 files changed, 111 insertions, 63 deletions
diff --git a/wqflask/wqflask/do_search.py b/wqflask/wqflask/do_search.py
index be4742e9..b6580bbe 100644
--- a/wqflask/wqflask/do_search.py
+++ b/wqflask/wqflask/do_search.py
@@ -108,6 +108,21 @@ class MrnaAssaySearch(DoSearch):
'Max LRS Location',
'Additive Effect']
+ def get_alias_where_clause(self):
+ search_string = escape(self.search_term[0])
+
+ if self.search_term[0] != "*":
+ match_clause = """((MATCH (ProbeSet.symbol) AGAINST ('%s' IN BOOLEAN MODE))) and """ % (search_string)
+ else:
+ match_clause = ""
+
+ where_clause = (match_clause +
+ """ProbeSet.Id = ProbeSetXRef.ProbeSetId
+ and ProbeSetXRef.ProbeSetFreezeId = %s
+ """ % (escape(str(self.dataset.id))))
+
+ return where_clause
+
def get_where_clause(self):
search_string = escape(self.search_term[0])
@@ -119,19 +134,8 @@ class MrnaAssaySearch(DoSearch):
GenbankId,
UniGeneId,
Probe_Target_Description)
- AGAINST ('%s' IN BOOLEAN MODE))
+ AGAINST ('%s' IN BOOLEAN MODE))) AND
""" % (search_string)
-
- aliases = get_aliases(search_string, self.dataset.group.species)
- if len(aliases) > 0:
- match_clause += " or "
- alias_string_list = []
- for alias in aliases:
- alias_string_list.append('"'+alias+'"')
- alias_string = " ".join(alias_string_list)
- match_clause += "(MATCH (ProbeSet.symbol) AGAINST ('%s' IN BOOLEAN MODE))) and " % alias_string
- else:
- match_clause += ") and "
else:
match_clause = ""
diff --git a/wqflask/wqflask/search_results.py b/wqflask/wqflask/search_results.py
index 33515e25..5a5a850b 100644
--- a/wqflask/wqflask/search_results.py
+++ b/wqflask/wqflask/search_results.py
@@ -11,6 +11,7 @@ import math
import datetime
import collections
import re
+import requests
from pprint import pformat as pf
@@ -152,60 +153,68 @@ views.py).
self.search_terms = parser.parse(self.search_terms)
logger.debug("After parsing:", self.search_terms)
- if len(self.search_terms) > 1:
- logger.debug("len(search_terms)>1")
- combined_from_clause = ""
- combined_where_clause = ""
- previous_from_clauses = [] #The same table can't be referenced twice in the from clause
- for i, a_search in enumerate(self.search_terms):
- if a_search['key'] == "GO":
- self.go_term = a_search['search_term'][0]
- gene_list = get_GO_symbols(a_search)
- self.search_terms += gene_list
- continue
- else:
- the_search = self.get_search_ob(a_search)
- if the_search != None:
- get_from_clause = getattr(the_search, "get_from_clause", None)
- if callable(get_from_clause):
- from_clause = the_search.get_from_clause()
- if from_clause in previous_from_clauses:
- pass
- else:
- previous_from_clauses.append(from_clause)
- combined_from_clause += from_clause
- where_clause = the_search.get_where_clause()
- combined_where_clause += "(" + where_clause + ")"
- if (i+1) < len(self.search_terms):
- if self.and_or == "and":
- combined_where_clause += "AND"
- else:
- combined_where_clause += "OR"
+ combined_from_clause = ""
+ combined_where_clause = ""
+ previous_from_clauses = [] #The same table can't be referenced twice in the from clause
+
+ logger.debug("len(search_terms)>1")
+ symbol_list = []
+ if self.dataset.type == "ProbeSet":
+ for a_search in self.search_terms:
+ if a_search['key'] == None:
+ symbol_list.append(a_search['search_term'][0])
+
+ alias_terms = get_aliases(symbol_list, self.dataset.group.species)
+
+ for i, a_search in enumerate(alias_terms):
+ the_search = self.get_search_ob(a_search)
+ if the_search != None:
+ get_from_clause = getattr(the_search, "get_from_clause", None)
+ if callable(get_from_clause):
+ from_clause = the_search.get_from_clause()
+ if from_clause in previous_from_clauses:
+ pass
+ else:
+ previous_from_clauses.append(from_clause)
+ combined_from_clause += from_clause
+ where_clause = the_search.get_alias_where_clause()
+ combined_where_clause += "(" + where_clause + ")"
+ if self.and_or == "and":
+ combined_where_clause += "AND"
else:
- self.search_term_exists = False
- if self.search_term_exists:
- combined_where_clause = "(" + combined_where_clause + ")"
- final_query = the_search.compile_final_query(combined_from_clause, combined_where_clause)
- results = the_search.execute(final_query)
- self.results.extend(results)
- else:
- if self.search_terms == []:
- self.search_term_exists = False
+ combined_where_clause += "OR"
+
+ for i, a_search in enumerate(self.search_terms):
+ if a_search['key'] == "GO":
+ self.go_term = a_search['search_term'][0]
+ gene_list = get_GO_symbols(a_search)
+ self.search_terms += gene_list
+ continue
else:
- for a_search in self.search_terms:
- logger.debug("TERMS:", self.search_terms)
- if a_search['key'] == "GO":
- self.go_term = a_search['search_term'][0]
- gene_list = get_GO_symbols(a_search)
- self.search_terms += gene_list
- self.search_terms.pop(0)
- continue
- else:
- the_search = self.get_search_ob(a_search)
- if the_search != None:
- self.results.extend(the_search.run())
+ the_search = self.get_search_ob(a_search)
+ if the_search != None:
+ get_from_clause = getattr(the_search, "get_from_clause", None)
+ if callable(get_from_clause):
+ from_clause = the_search.get_from_clause()
+ if from_clause in previous_from_clauses:
+ pass
else:
- self.search_term_exists = False
+ previous_from_clauses.append(from_clause)
+ combined_from_clause += from_clause
+ where_clause = the_search.get_where_clause()
+ combined_where_clause += "(" + where_clause + ")"
+ if (i+1) < len(self.search_terms):
+ if self.and_or == "and":
+ combined_where_clause += "AND"
+ else:
+ combined_where_clause += "OR"
+ else:
+ self.search_term_exists = False
+ if self.search_term_exists:
+ combined_where_clause = "(" + combined_where_clause + ")"
+ final_query = the_search.compile_final_query(combined_from_clause, combined_where_clause)
+ results = the_search.execute(final_query)
+ self.results.extend(results)
if self.search_term_exists:
if the_search != None:
@@ -260,3 +269,38 @@ def insert_newlines(string, every=64):
lines.append(string[i:i+every])
return '\n'.join(lines)
+def get_aliases(symbol_list, species):
+
+ updated_symbols = []
+ for symbol in symbol_list:
+ if species == "mouse":
+ updated_symbols.append(symbol.capitalize())
+ elif species == "human":
+ updated_symbols.append(symbol.upper())
+ else:
+ updated_symbols.append(symbol)
+
+ symbols_string = ",".join(updated_symbols)
+
+ filtered_aliases = []
+ response = requests.get("http://gn2.genenetwork.org/gn3/gene/aliases2/" + symbols_string)
+ if response:
+ alias_lists = json.loads(response.content)
+ seen = set()
+ for aliases in alias_lists:
+ for item in aliases[1]:
+ if item in seen:
+ continue
+ else:
+ filtered_aliases.append(item)
+ seen.add(item)
+
+ search_terms = []
+ for alias in filtered_aliases:
+ the_search_term = {'key': None,
+ 'search_term': [alias],
+ 'separator' : None}
+ search_terms.append(the_search_term)
+
+ return search_terms
+