about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--wqflask/wqflask/do_search.py105
1 files changed, 56 insertions, 49 deletions
diff --git a/wqflask/wqflask/do_search.py b/wqflask/wqflask/do_search.py
index dc0093eb..b6f540fa 100644
--- a/wqflask/wqflask/do_search.py
+++ b/wqflask/wqflask/do_search.py
@@ -5,9 +5,6 @@ import string
 
 from wqflask.database import database_connection
 
-from utility.db_tools import escape
-from wqflask.database import database_connection
-
 import sys
 
 from db import webqtlDatabaseFunction
@@ -48,6 +45,13 @@ class DoSearch:
 
         return keyword
 
+    def sescape(self, item):
+        """Single escape"""
+        from utility.tools import get_setting
+        with database_connection(get_setting("SQL_URI")) as conn:
+            escaped = conn.escape_string(str(item)).decode()
+        return escaped
+
     def mescape(self, *items):
         """Multiple escape"""
         from utility.tools import get_setting
@@ -115,7 +119,7 @@ class MrnaAssaySearch(DoSearch):
                      'Additive Effect']
 
     def get_alias_where_clause(self):
-        search_string = escape(self.search_term[0])
+        search_string = self.sescape(self.search_term[0])
 
         if self.search_term[0] != "*":
             match_clause = """((MATCH (ProbeSet.symbol) AGAINST ('%s' IN BOOLEAN MODE))) and """ % (
@@ -126,12 +130,12 @@ class MrnaAssaySearch(DoSearch):
         where_clause = (match_clause
                         + """ProbeSet.Id = ProbeSetXRef.ProbeSetId
                and ProbeSetXRef.ProbeSetFreezeId = %s
-                        """ % (escape(str(self.dataset.id))))
+                        """ % (self.sescape(str(self.dataset.id))))
 
         return where_clause
 
     def get_where_clause(self):
-        search_string = escape(self.search_term[0])
+        search_string = self.sescape(self.search_term[0])
 
         if self.search_term[0] != "*":
             if re.search("\w{1,2}\-\w+|\w+\-\w{1,2}", self.search_term[0]):
@@ -151,7 +155,7 @@ class MrnaAssaySearch(DoSearch):
         where_clause = (match_clause
                         + """ProbeSet.Id = ProbeSetXRef.ProbeSetId
                and ProbeSetXRef.ProbeSetFreezeId = %s
-                        """ % (escape(str(self.dataset.id))))
+                        """ % (self.sescape(str(self.dataset.id))))
 
         return where_clause
 
@@ -166,9 +170,9 @@ class MrnaAssaySearch(DoSearch):
                     and ProbeSet.Id = ProbeSetXRef.ProbeSetId
                     and ProbeSetXRef.ProbeSetFreezeId = %s
                 ORDER BY ProbeSet.symbol ASC
-                            """ % (escape(from_clause),
+                            """ % (self.sescape(from_clause),
                                    where_clause,
-                                   escape(str(self.dataset.id))))
+                                   self.sescape(str(self.dataset.id))))
         return query
 
     def run_combined(self, from_clause='', where_clause=''):
@@ -183,9 +187,9 @@ class MrnaAssaySearch(DoSearch):
                     and ProbeSet.Id = ProbeSetXRef.ProbeSetId
                     and ProbeSetXRef.ProbeSetFreezeId = %s
                 ORDER BY ProbeSet.symbol ASC
-                            """ % (escape(from_clause),
+                            """ % (self.sescape(from_clause),
                                    where_clause,
-                                   escape(str(self.dataset.id))))
+                                   self.sescape(str(self.dataset.id))))
 
         return self.execute(query)
 
@@ -281,8 +285,8 @@ class PhenotypeSearch(DoSearch):
                         and PublishFreeze.Id = %s
                         ORDER BY PublishXRef.Id""" % (
                          from_clause,
-                         escape(str(self.dataset.group.id)),
-                         escape(str(self.dataset.id))))
+                         self.sescape(str(self.dataset.group.id)),
+                         self.sescape(str(self.dataset.id))))
         else:
             query = (self.base_query +
                      """%s
@@ -294,8 +298,8 @@ class PhenotypeSearch(DoSearch):
                         ORDER BY PublishXRef.Id""" % (
                          from_clause,
                          where_clause,
-                         escape(str(self.dataset.group.id)),
-                         escape(str(self.dataset.id))))
+                         self.sescape(str(self.dataset.group.id)),
+                         self.sescape(str(self.dataset.id))))
 
         return query
 
@@ -312,8 +316,8 @@ class PhenotypeSearch(DoSearch):
                     PublishFreeze.Id = %s""" % (
                      from_clause,
                      where_clause,
-                     escape(str(self.dataset.group.id)),
-                     escape(str(self.dataset.id))))
+                     self.sescape(str(self.dataset.group.id)),
+                     self.sescape(str(self.dataset.id))))
 
         return self.execute(query)
 
@@ -371,14 +375,14 @@ class GenotypeSearch(DoSearch):
             query = (self.base_query
                      + """WHERE Geno.Id = GenoXRef.GenoId
                         and GenoXRef.GenoFreezeId = GenoFreeze.Id
-                        and GenoFreeze.Id = %s""" % (escape(str(self.dataset.id))))
+                        and GenoFreeze.Id = %s""" % (self.sescape(str(self.dataset.id))))
         else:
             query = (self.base_query +
                      """WHERE %s
                         and Geno.Id = GenoXRef.GenoId
                         and GenoXRef.GenoFreezeId = GenoFreeze.Id
                         and GenoFreeze.Id = %s""" % (where_clause,
-                                                     escape(str(self.dataset.id))))
+                                                     self.sescape(str(self.dataset.id))))
 
         return query
 
@@ -463,7 +467,7 @@ class GoSearch(MrnaAssaySearch):
         statements = ("""%s.symbol=GOgene_product.symbol and
            GOassociation.gene_product_id=GOgene_product.id and
            GOterm.id=GOassociation.term_id""" % (
-            escape(self.dataset.type)))
+            self.sescape(self.dataset.type)))
 
         where_clause = " %s = '%s' and %s " % (field, go_id, statements)
 
@@ -631,17 +635,17 @@ class CisTransLrsSearch(DoSearch):
 
             sub_clause = """ %sXRef.LRS > %s and
                 %sXRef.LRS < %s  and """ % (
-                escape(self.dataset.type),
-                escape(str(min(lrs_min, lrs_max))),
-                escape(self.dataset.type),
-                escape(str(max(lrs_min, lrs_max)))
+                self.sescape(self.dataset.type),
+                self.sescape(str(min(lrs_min, lrs_max))),
+                self.sescape(self.dataset.type),
+                self.sescape(str(max(lrs_min, lrs_max)))
             )
         else:
             # Deal with >, <, >=, and <=
             sub_clause = """ %sXRef.LRS %s %s and """ % (
-                escape(self.dataset.type),
-                escape(self.search_operator),
-                escape(self.search_term[0])
+                self.sescape(self.dataset.type),
+                self.sescape(self.search_operator),
+                self.sescape(self.search_term[0])
             )
 
         if cis_trans == "cis":
@@ -650,36 +654,39 @@ class CisTransLrsSearch(DoSearch):
                     %sXRef.Locus = Geno.name and
                     Geno.SpeciesId = %s and
                     %s.Chr = Geno.Chr""" % (
-                escape(self.dataset.type),
+                self.sescape(self.dataset.type),
                 the_operator,
-                escape(str(self.mb_buffer)),
-                escape(self.dataset.type),
-                escape(str(self.species_id)),
-                escape(self.dataset.type)
+                self.sescape(str(self.mb_buffer)),
+                self.sescape(self.dataset.type),
+                self.sescape(str(self.species_id)),
+                self.sescape(self.dataset.type)
             )
         else:
             if chromosome:
-                location_clause = "(%s.Chr = '%s' and %s.Chr = Geno.Chr and ABS(%s.Mb-Geno.Mb) %s %s) or (%s.Chr != Geno.Chr and Geno.Chr = '%s')" % (escape(self.dataset.type),
-                                                                                                                                                      chromosome,
-                                                                                                                                                      escape(
-                                                                                                                                                      self.dataset.type),
-                                                                                                                                                      escape(
-                                                                                                                                                      self.dataset.type),
-                                                                                                                                                      the_operator,
-                                                                                                                                                      escape(
-                                                                                                                                                      str(self.mb_buffer)),
-                                                                                                                                                      escape(
-                                                                                                                                                      self.dataset.type),
-                                                                                                                                                      chromosome)
+                location_clause = """
+                        (%s.Chr = '%s' and %s.Chr = Geno.Chr and ABS(%s.Mb-Geno.Mb) %s %s) 
+                        or (%s.Chr != Geno.Chr and Geno.Chr = '%s')""" % (
+                    self.sescape(self.dataset.type),
+                    chromosome,
+                    self.sescape(
+                    self.dataset.type),
+                    self.sescape(
+                    self.dataset.type),
+                    the_operator,
+                    self.sescape(
+                    str(self.mb_buffer)),
+                    self.sescape(
+                    self.dataset.type),
+                    chromosome)
             else:
-                location_clause = "(ABS(%s.Mb-Geno.Mb) %s %s and %s.Chr = Geno.Chr) or (%s.Chr != Geno.Chr)" % (escape(
-                    self.dataset.type), the_operator, escape(str(self.mb_buffer)), escape(self.dataset.type), escape(self.dataset.type))
+                location_clause = "(ABS(%s.Mb-Geno.Mb) %s %s and %s.Chr = Geno.Chr) or (%s.Chr != Geno.Chr)" % (self.sescape(
+                    self.dataset.type), the_operator, self.sescape(str(self.mb_buffer)), self.sescape(self.dataset.type), self.sescape(self.dataset.type))
             where_clause = sub_clause + """
                     %sXRef.Locus = Geno.name and
                     Geno.SpeciesId = %s and
                     (%s)""" % (
-                escape(self.dataset.type),
-                escape(str(self.species_id)),
+                self.sescape(self.dataset.type),
+                self.sescape(str(self.species_id)),
                 location_clause
             )
 
@@ -807,7 +814,7 @@ class RangeSearch(MrnaAssaySearch):
             where_clause = """ (SELECT Pow(2, max(value) -min(value))
                                      FROM ProbeSetData
                                      WHERE ProbeSetData.Id = ProbeSetXRef.dataId) > %s
-                                    """ % (escape(self.search_term[0]))
+                                    """ % (self.sescape(self.search_term[0]))
         return where_clause
 
     def run(self):