aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzsloan2022-04-05 20:21:22 +0000
committerzsloan2022-04-05 20:21:22 +0000
commite9d84b4b4a82aa7ac3c170c3cb6d23346650ba16 (patch)
tree5c3eb54f954255b06bc8a7a7999c4ebb20632082
parent170717295c37fcaef5be84410b831f44e128f994 (diff)
downloadgenenetwork2-e9d84b4b4a82aa7ac3c170c3cb6d23346650ba16.tar.gz
Fix combined searches involving aliases
The logic for building the SQL query wasn't working correctly when aliases were involved. The query also checks for a gene symbol's aliases in the DB, but this wasn't properly handling the AND/OR logic, leading to no results being shown when doing a "Get Combined" search involving a gene symbol. This also removed some unused code related to aliases.
-rw-r--r--wqflask/wqflask/do_search.py25
-rw-r--r--wqflask/wqflask/search_results.py144
2 files changed, 76 insertions, 93 deletions
diff --git a/wqflask/wqflask/do_search.py b/wqflask/wqflask/do_search.py
index 1e245d6a..fa18c10b 100644
--- a/wqflask/wqflask/do_search.py
+++ b/wqflask/wqflask/do_search.py
@@ -961,31 +961,6 @@ def is_number(s):
return False
-def get_aliases(symbol, species):
- if species == "mouse":
- symbol_string = symbol.capitalize()
- elif species == "human":
- symbol_string = symbol.upper()
- else:
- return []
-
- filtered_aliases = []
- response = requests.get(
- GN2_BASE_URL + "/gn3/gene/aliases/" + symbol_string)
- if response:
- alias_list = json.loads(response.content)
-
- seen = set()
- for item in alias_list:
- if item in seen:
- continue
- else:
- filtered_aliases.append(item)
- seen.add(item)
-
- return filtered_aliases
-
-
if __name__ == "__main__":
# Usually this will be used as a library, but call it from the command line for testing
# And it runs the code below
diff --git a/wqflask/wqflask/search_results.py b/wqflask/wqflask/search_results.py
index 858ca56d..52303c91 100644
--- a/wqflask/wqflask/search_results.py
+++ b/wqflask/wqflask/search_results.py
@@ -231,33 +231,6 @@ class SearchResultPage:
# The same table can't be referenced twice in the from clause
previous_from_clauses = []
- 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:
- 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]
@@ -267,28 +240,69 @@ class SearchResultPage:
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"
+ if a_search['key'] == None and self.dataset.type == "ProbeSet":
+ alias_terms = get_alias_terms(a_search['search_term'][0], self.dataset.group.species)
+ alias_where_clauses = []
+ for alias_search in alias_terms:
+ alias_search_ob = self.get_search_ob(alias_search)
+ if alias_search_ob != None:
+ get_from_clause = getattr(
+ alias_search_ob, "get_from_clause", None)
+ if callable(get_from_clause):
+ from_clause = alias_search_ob.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 = alias_search_ob.get_alias_where_clause()
+ alias_where_clauses.append(where_clause)
+
+ 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()
+ alias_where_clauses.append(where_clause)
+
+ combined_where_clause += "(" + " OR ".join(alias_where_clauses) + ")"
+ if (i + 1) < len(self.search_terms):
+ if self.and_or == "and":
+ combined_where_clause += "AND"
+ else:
+ combined_where_clause += "OR"
+ else:
+ 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"
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)
@@ -345,39 +359,33 @@ def insert_newlines(string, every=64):
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)
+def get_alias_terms(symbol, species):
+ if species == "mouse":
+ symbol_string = symbol.capitalize()
+ elif species == "human":
+ symbol_string = symbol.upper()
+ else:
+ return []
filtered_aliases = []
response = requests.get(
- GN2_BASE_URL + "gn3/gene/aliases/" + symbols_string)
-
+ GN2_BASE_URL + "/gn3/gene/aliases/" + symbol_string)
if response:
- alias_lists = json.loads(response.content)
+ alias_list = 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)
+ for item in alias_list:
+ if item in seen:
+ continue
+ else:
+ filtered_aliases.append(item)
+ seen.add(item)
- search_terms = []
+ alias_terms = []
for alias in filtered_aliases:
the_search_term = {'key': None,
'search_term': [alias],
'separator': None}
- search_terms.append(the_search_term)
+ alias_terms.append(the_search_term)
- return search_terms
+ return alias_terms