aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBonfaceKilz2022-03-17 16:11:10 +0300
committerBonfaceKilz2022-03-17 16:24:30 +0300
commitd742153d57e3f755781553fcbc32ad96295e7192 (patch)
treea9293ae8cd73e56318fc565315b0e10e1c517ba1
parenteca135dd8dbde3ee36c4258d4b02d636722998bd (diff)
downloadgenenetwork2-d742153d57e3f755781553fcbc32ad96295e7192.tar.gz
Replace "g.db" object with a proper database connection
* wqflask/tests/unit/wqflask/api/test_correlation.py: Use proper database connection instead of the db connection attached at "g.db". * wqflask/tests/unit/wqflask/snp_browser/test_snp_browser.py: Ditto. * wqflask/wqflask/api/correlation.py: Ditto. * wqflask/wqflask/snp_browser/snp_browser.py: Ditto.
-rw-r--r--wqflask/tests/unit/wqflask/api/test_correlation.py69
-rw-r--r--wqflask/tests/unit/wqflask/snp_browser/test_snp_browser.py132
-rw-r--r--wqflask/wqflask/api/correlation.py78
-rw-r--r--wqflask/wqflask/snp_browser/snp_browser.py119
4 files changed, 202 insertions, 196 deletions
diff --git a/wqflask/tests/unit/wqflask/api/test_correlation.py b/wqflask/tests/unit/wqflask/api/test_correlation.py
index 1089a36f..57986e80 100644
--- a/wqflask/tests/unit/wqflask/api/test_correlation.py
+++ b/wqflask/tests/unit/wqflask/api/test_correlation.py
@@ -52,28 +52,28 @@ class TestCorrelations(unittest.TestCase):
self.assertEqual(corr_params_results, expected_results)
- @mock.patch("wqflask.api.correlation.g")
+ @mock.patch("wqflask.api.correlation.database_connection")
def test_convert_to_mouse_gene_id(self, mock_db):
-
- results = convert_to_mouse_gene_id(species="Other", gene_id="")
- self.assertEqual(results, None)
-
- rat_species_results = convert_to_mouse_gene_id(
- species="rat", gene_id="GH1")
-
- mock_db.db.execute.return_value.fetchone.side_effect = [
- AttributeSetter({"mouse": "MG-1"}), AttributeSetter({"mouse": "MG-2"})]
-
- self.assertEqual(convert_to_mouse_gene_id(
- species="mouse", gene_id="MG-4"), "MG-4")
- self.assertEqual(convert_to_mouse_gene_id(
- species="rat", gene_id="R1"), "MG-1")
- self.assertEqual(convert_to_mouse_gene_id(
- species="human", gene_id="H1"), "MG-2")
-
- @mock.patch("wqflask.api.correlation.g")
+ conn = mock.MagicMock()
+ mock_db.return_value.__enter__.return_value = conn
+ with conn.cursor() as cursor:
+ cursor.fetchone.side_effect = [
+ ("MG-1",), ("MG-2",)]
+
+ self.assertEqual(convert_to_mouse_gene_id(
+ species="Other", gene_id=""), None)
+ self.assertEqual(convert_to_mouse_gene_id(
+ species="mouse", gene_id="MG-4"), "MG-4")
+ self.assertEqual(convert_to_mouse_gene_id(
+ species="rat", gene_id="R1"), "MG-1")
+ self.assertEqual(convert_to_mouse_gene_id(
+ species="human", gene_id="H1"), "MG-2")
+
+ @mock.patch("wqflask.api.correlation.database_connection")
@mock.patch("wqflask.api.correlation.convert_to_mouse_gene_id")
- def test_do_literature_correlation_for_all_traits(self, mock_convert_to_mouse_geneid, mock_db):
+ def test_do_literature_correlation_for_all_traits(
+ self,
+ mock_convert_to_mouse_geneid, mock_db):
mock_convert_to_mouse_geneid.side_effect = [
"MG-1", "MG-2;", "MG-3", "MG-4"]
@@ -83,19 +83,22 @@ class TestCorrelations(unittest.TestCase):
"TT-3": "GH-3"
}
- mock_db.db.execute.return_value.fetchone.side_effect = [AttributeSetter(
- {"value": "V1"}), AttributeSetter({"value": "V2"}), AttributeSetter({"value": "V3"})]
-
- this_trait = AttributeSetter({"geneid": "GH-1"})
-
- target_dataset = AttributeSetter(
- {"group": AttributeSetter({"species": "rat"})})
- results = do_literature_correlation_for_all_traits(
- this_trait=this_trait, target_dataset=target_dataset, trait_geneid_dict=trait_geneid_dict, corr_params={})
-
- expected_results = {'TT-1': ['GH-1', 0],
- 'TT-2': ['GH-2', 'V1'], 'TT-3': ['GH-3', 'V2']}
- self.assertEqual(results, expected_results)
+ conn = mock.MagicMock()
+ mock_db.return_value.__enter__.return_value = conn
+ with conn.cursor() as cursor:
+ cursor.fetchone.side_effect = [
+ AttributeSetter({"value": "V1"}),
+ AttributeSetter({"value": "V2"}),
+ AttributeSetter({"value": "V3"})]
+ this_trait = AttributeSetter({"geneid": "GH-1"})
+ target_dataset = AttributeSetter(
+ {"group": AttributeSetter({"species": "rat"})})
+ results = do_literature_correlation_for_all_traits(
+ this_trait=this_trait, target_dataset=target_dataset,
+ trait_geneid_dict=trait_geneid_dict, corr_params={})
+ expected_results = {'TT-1': ['GH-1', 0],
+ 'TT-2': ['GH-2', 'V1'], 'TT-3': ['GH-3', 'V2']}
+ self.assertEqual(results, expected_results)
@mock.patch("wqflask.api.correlation.corr_result_helpers.normalize_values")
def test_get_sample_r_and_p_values(self, mock_normalize):
diff --git a/wqflask/tests/unit/wqflask/snp_browser/test_snp_browser.py b/wqflask/tests/unit/wqflask/snp_browser/test_snp_browser.py
index 89442c47..46a74231 100644
--- a/wqflask/tests/unit/wqflask/snp_browser/test_snp_browser.py
+++ b/wqflask/tests/unit/wqflask/snp_browser/test_snp_browser.py
@@ -40,66 +40,88 @@ class TestSnpBrowser(unittest.TestCase):
self.assertEqual(expected_results, results_with_snp)
self.assertEqual(expected_results_with_indel, results_with_indel)
- @mock.patch("wqflask.snp_browser.snp_browser.g")
+ @mock.patch("wqflask.snp_browser.snp_browser.database_connection")
def test_get_gene_id(self, mock_db):
- mock_db.db.execute.return_value.fetchone.return_value = "517d729f-aa13-4413-a885-40a3f7ff768a"
- db_query_value = """
- SELECT
- geneId
- FROM
- GeneList
- WHERE
- SpeciesId = c9c0f59e-1259-4cba-91e6-831ef1a99c83 AND geneSymbol = 'INSR'
- """
- results = get_gene_id(
- species_id="c9c0f59e-1259-4cba-91e6-831ef1a99c83", gene_name="INSR")
- mock_db.db.execute.assert_called_once_with(db_query_value)
- self.assertEqual(results, "517d729f-aa13-4413-a885-40a3f7ff768a")
+ db_query_value = ("SELECT geneId FROM GeneList WHERE "
+ "SpeciesId = %s AND geneSymbol = %s")
+ conn = mock.MagicMock()
+ mock_db.return_value.__enter__.return_value = conn
+ with conn.cursor() as cursor:
+ cursor.fetchone.return_value = (("517d729f-aa13-4413"
+ "-a885-40a3f7ff768a"),)
- @mock.patch("wqflask.snp_browser.snp_browser.g")
+ results = get_gene_id(
+ species_id="c9c0f59e-1259-4cba-91e6-831ef1a99c83",
+ gene_name="INSR")
+ cursor.execute.assert_called_once_with(
+ db_query_value,
+ ("c9c0f59e-1259-4cba-91e6-831ef1a99c83",
+ "INSR"))
+ self.assertEqual(results,
+ "517d729f-aa13-4413-a885-40a3f7ff768a")
+
+ @mock.patch("wqflask.snp_browser.snp_browser.database_connection")
def test_gene_id_name_dict(self, mock_db):
no_gene_names = []
- self.assertEqual("", get_gene_id_name_dict(
- species_id="fregb343bui43g4", gene_name_list=no_gene_names))
- gene_name_list = ["GH1", "GH2", "GH3"]
- mock_db.db.execute.return_value.fetchall.side_effect = [[], [("fsdf43-fseferger-f22", "GH1"), ("1sdf43-fsewferger-f22", "GH2"),
- ("fwdj43-fstferger-f22", "GH3")]]
- no_results = get_gene_id_name_dict(
- species_id="ret3-32rf32", gene_name_list=gene_name_list)
- results_found = get_gene_id_name_dict(
- species_id="ret3-32rf32", gene_name_list=gene_name_list)
- expected_found = {'GH1': 'fsdf43-fseferger-f22',
- 'GH2': '1sdf43-fsewferger-f22', 'GH3': 'fwdj43-fstferger-f22'}
- db_query_value = """
- SELECT
- geneId, geneSymbol
- FROM
- GeneList
- WHERE
- SpeciesId = ret3-32rf32 AND geneSymbol in ('GH1','GH2','GH3')
- """
- mock_db.db.execute.assert_called_with(db_query_value)
- self.assertEqual(results_found, expected_found)
- self.assertEqual(no_results, {})
+ conn = mock.MagicMock()
+ mock_db.return_value.__enter__.return_value = conn
+ with conn.cursor() as cursor:
+ cursor.fetchall.side_effect = [
+ [],
+ [("fsdf43-fseferger-f22", "GH1"),
+ ("1sdf43-fsewferger-f22", "GH2"),
+ ("fwdj43-fstferger-f22", "GH3")]]
+ self.assertEqual("", get_gene_id_name_dict(
+ species_id="fregb343bui43g4",
+ gene_name_list=no_gene_names))
+ gene_name_list = ["GH1", "GH2", "GH3"]
+ no_results = get_gene_id_name_dict(
+ species_id="ret3-32rf32", gene_name_list=gene_name_list)
+ results_found = get_gene_id_name_dict(
+ species_id="ret3-32rf32", gene_name_list=gene_name_list)
+ expected_found = {'GH1': 'fsdf43-fseferger-f22',
+ 'GH2': '1sdf43-fsewferger-f22',
+ 'GH3': 'fwdj43-fstferger-f22'}
+ db_query_value = (
+ "SELECT geneId, geneSymbol FROM GeneList WHERE "
+ "SpeciesId = %s AND geneSymbol in (%s, %s, %s)")
+ cursor.execute.assert_called_with(
+ db_query_value, ("ret3-32rf32", "GH1", "GH2", "GH3"))
+ self.assertEqual(results_found, expected_found)
+ self.assertEqual(no_results, {})
- @mock.patch("wqflask.snp_browser.snp_browser.g")
+ @mock.patch("wqflask.snp_browser.snp_browser.database_connection")
def test_check_if_in_gene(self, mock_db):
- mock_db.db.execute.return_value.fetchone.side_effect = [
- ("fsdf-232sdf-sdf", "GHA"), ""]
- results_found = check_if_in_gene(
- species_id="517d729f-aa13-4413-a885-40a3f7ff768a", chr="CH1", mb=12.09)
- db_query_value = """SELECT geneId, geneSymbol
- FROM GeneList
- WHERE SpeciesId = 517d729f-aa13-4413-a885-40a3f7ff768a AND chromosome = 'CH1' AND
- (txStart < 12.09 AND txEnd > 12.09); """
- gene_not_found = check_if_in_gene(
- species_id="517d729f-aa13-4413-a885-40a3f7ff768a", chr="CH1", mb=12.09)
- mock_db.db.execute.assert_called_with(db_query_value)
- self.assertEqual(gene_not_found, "")
+ conn = mock.MagicMock()
+ mock_db.return_value.__enter__.return_value = conn
+ with conn.cursor() as cursor:
+ cursor.fetchone.side_effect = [
+ ("fsdf-232sdf-sdf", "GHA"), ""]
+ results_found = check_if_in_gene(
+ species_id="517d729f-aa13-4413-a885-40a3f7ff768a",
+ chr_="CH1", mb=12.09)
+ self.assertEqual(results_found, ["fsdf-232sdf-sdf", "GHA"])
+ db_query_value = (
+ "SELECT geneId, geneSymbol FROM GeneList "
+ "WHERE SpeciesId = %s AND chromosome = %s "
+ "AND (txStart < %s AND txEnd > %s)")
+ gene_not_found = check_if_in_gene(
+ species_id="517d729f-aa13-4413-a885-40a3f7ff768a",
+ chr_="CH1", mb=12.09)
+ cursor.execute.assert_has_calls(
+ [mock.call(db_query_value,
+ ("517d729f-aa13-4413-a885-40a3f7ff768a",
+ "CH1", 12.09, 12.09)),
+ mock.call(db_query_value,
+ ("517d729f-aa13-4413-a885-40a3f7ff768a",
+ "CH1", 12.09, 12.09))])
+ self.assertEqual(gene_not_found, "")
- @mock.patch("wqflask.snp_browser.snp_browser.g")
+ @mock.patch("wqflask.snp_browser.snp_browser.database_connection")
def test_get_browser_sample_lists(self, mock_db):
- mock_db.db.execute.return_value.fetchall.return_value = []
-
- results = get_browser_sample_lists(species_id="12")
- self.assertEqual(results, {'mouse': [], 'rat': []})
+ conn = mock.MagicMock()
+ mock_db.return_value.__enter__.return_value = conn
+ with conn.cursor() as cursor:
+ cursor.execute.return_value.fetchall.return_value = []
+ results = get_browser_sample_lists(species_id="12")
+ self.assertEqual(results, {'mouse': [], 'rat': []})
diff --git a/wqflask/wqflask/api/correlation.py b/wqflask/wqflask/api/correlation.py
index 9b875c99..ab1e772a 100644
--- a/wqflask/wqflask/api/correlation.py
+++ b/wqflask/wqflask/api/correlation.py
@@ -3,11 +3,9 @@ import scipy
from base import data_set
from base.trait import create_trait, retrieve_sample_data
-from flask import g
from utility import corr_result_helpers
-from utility.db_tools import escape
from wqflask.correlation import correlation_functions
-
+from wqflask.database import database_connection
def do_correlation(start_vars):
assert('db' in start_vars)
@@ -125,22 +123,24 @@ def do_literature_correlation_for_all_traits(this_trait, target_dataset, trait_g
target_dataset.group.species.lower(), gene_id)
if mouse_gene_id and str(mouse_gene_id).find(";") == -1:
- result = g.db.execute(
- """SELECT value
- FROM LCorrRamin3
- WHERE GeneId1='%s' and
- GeneId2='%s'
- """ % (escape(mouse_gene_id), escape(input_trait_mouse_gene_id))
- ).fetchone()
- if not result:
- result = g.db.execute("""SELECT value
- FROM LCorrRamin3
- WHERE GeneId2='%s' and
- GeneId1='%s'
- """ % (escape(mouse_gene_id), escape(input_trait_mouse_gene_id))
- ).fetchone()
+ result = ""
+ with database_connection() as conn:
+ with conn.cursor() as cursor:
+ cursor.execute(
+ ("SELECT value FROM LCorrRamin3 "
+ "WHERE GeneId1=%s AND GeneId2=%s"),
+ (mouse_gene_id,
+ input_trait_mouse_gene_id))
+ result = cursor.fetchone()
+ if not result:
+ cursor.execute(
+ ("SELECT value FROM LCorrRamin3 "
+ "WHERE GeneId2=%s AND GeneId1=%s"),
+ (mouse_gene_id,
+ input_trait_mouse_gene_id))
+ result = cursor.fetchone()
if result:
- lit_corr = result.value
+ lit_corr = result[0]
lit_corr_data[trait] = [gene_id, lit_corr]
else:
lit_corr_data[trait] = [gene_id, 0]
@@ -195,30 +195,24 @@ def convert_to_mouse_gene_id(species=None, gene_id=None):
return None
mouse_gene_id = None
-
- if species == 'mouse':
- mouse_gene_id = gene_id
-
- elif species == 'rat':
-
- query = """SELECT mouse
- FROM GeneIDXRef
- WHERE rat='%s'""" % escape(gene_id)
-
- result = g.db.execute(query).fetchone()
- if result != None:
- mouse_gene_id = result.mouse
-
- elif species == 'human':
-
- query = """SELECT mouse
- FROM GeneIDXRef
- WHERE human='%s'""" % escape(gene_id)
-
- result = g.db.execute(query).fetchone()
- if result != None:
- mouse_gene_id = result.mouse
-
+ with database_connection() as conn:
+ with conn.cursor() as cursor:
+ if species == 'mouse':
+ mouse_gene_id = gene_id
+ elif species == 'rat':
+ cursor.execute(
+ ("SELECT mouse FROM GeneIDXRef "
+ "WHERE rat=%s"), gene_id)
+ result = cursor.fetchone()
+ if result:
+ mouse_gene_id = result[0]
+ elif species == 'human':
+ cursor.execute(
+ "SELECT mouse FROM GeneIDXRef "
+ "WHERE human=%s", gene_id)
+ result = cursor.fetchone()
+ if result:
+ mouse_gene_id = result[0]
return mouse_gene_id
diff --git a/wqflask/wqflask/snp_browser/snp_browser.py b/wqflask/wqflask/snp_browser/snp_browser.py
index cbdaf901..43bb55b5 100644
--- a/wqflask/wqflask/snp_browser/snp_browser.py
+++ b/wqflask/wqflask/snp_browser/snp_browser.py
@@ -6,6 +6,8 @@ from PIL import (Image)
from base import species
from base import webqtlConfig
+from wqflask.database import database_connection
+
class SnpBrowser:
@@ -662,24 +664,22 @@ class SnpBrowser:
click_mb_step = (self.end_mb - self.start_mb) / n_click
-
def get_browser_sample_lists(species_id=1):
strain_lists = {}
mouse_strain_list = []
- query = "SHOW COLUMNS FROM SnpPattern;"
- results = g.db.execute(query).fetchall()
- for result in results[1:]:
- mouse_strain_list.append(result[0])
-
rat_strain_list = []
- query = "SHOW COLUMNS FROM RatSnpPattern;"
- results = g.db.execute(query).fetchall()
- for result in results[2:]:
- rat_strain_list.append(result[0])
-
- strain_lists['mouse'] = mouse_strain_list
- strain_lists['rat'] = rat_strain_list
-
+ with database_connection() as conn:
+ with conn.cursor() as cursor:
+ cursor.execute("SHOW COLUMNS FROM SnpPattern")
+ _mouse_snp_pattern = cursor.fetchall()
+ cursor.execute("SHOW COLUMNS FROM RatSnpPattern")
+ _rats_snp_pattern = cursor.fetchall()
+ for result in _mouse_snp_pattern[1:]:
+ mouse_strain_list.append(result[0])
+ for result in _rats_snp_pattern[2:]:
+ rat_strain_list.append(result[0])
+ strain_lists['mouse'] = mouse_strain_list
+ strain_lists['rat'] = rat_strain_list
return strain_lists
@@ -885,64 +885,51 @@ def get_effect_info(effect_list):
def get_gene_id(species_id, gene_name):
- query = """
- SELECT
- geneId
- FROM
- GeneList
- WHERE
- SpeciesId = %s AND geneSymbol = '%s'
- """ % (species_id, gene_name)
-
- result = g.db.execute(query).fetchone()
-
- if len(result) > 0:
- return result
- else:
- return ""
+ query = ("SELECT geneId FROM GeneList WHERE "
+ "SpeciesId = %s AND geneSymbol = %s")
+
+ with database_connection() as conn:
+ with conn.cursor() as cursor:
+ cursor.execute(query, (species_id, gene_name))
+ if (result := cursor.fetchone()):
+ return result[0]
+ return ""
def get_gene_id_name_dict(species_id, gene_name_list):
gene_id_name_dict = {}
if len(gene_name_list) == 0:
return ""
- gene_name_str_list = ["'" + gene_name + \
- "'" for gene_name in gene_name_list]
- gene_name_str = ",".join(gene_name_str_list)
-
- query = """
- SELECT
- geneId, geneSymbol
- FROM
- GeneList
- WHERE
- SpeciesId = %s AND geneSymbol in (%s)
- """ % (species_id, gene_name_str)
-
- results = g.db.execute(query).fetchall()
-
- if len(results) > 0:
- for item in results:
- gene_id_name_dict[item[1]] = item[0]
-
+ query = ("SELECT geneId, geneSymbol FROM "
+ "GeneList WHERE SpeciesId = %s AND "
+ f"geneSymbol in ({', '.join(['%s'] * len(gene_name_list))})")
+ with database_connection() as conn:
+ with conn.cursor() as cursor:
+ cursor.execute(query, (species_id, *gene_name_list))
+ results = cursor.fetchall()
+ if results:
+ for item in results:
+ gene_id_name_dict[item[1]] = item[0]
return gene_id_name_dict
-def check_if_in_gene(species_id, chr, mb):
- if species_id != 0: # ZS: Check if this is necessary
- query = """SELECT geneId, geneSymbol
- FROM GeneList
- WHERE SpeciesId = {0} AND chromosome = '{1}' AND
- (txStart < {2} AND txEnd > {2}); """.format(species_id, chr, mb)
- else:
- query = """SELECT geneId,geneSymbol
- FROM GeneList
- WHERE chromosome = '{0}' AND
- (txStart < {1} AND txEnd > {1}); """.format(chr, mb)
-
- result = g.db.execute(query).fetchone()
-
- if result:
- return [result[0], result[1]]
- else:
- return ""
+def check_if_in_gene(species_id, chr_, mb):
+ with database_connection() as conn:
+ with conn.cursor() as cursor:
+ if species_id != 0: # ZS: Check if this is necessary
+ cursor.execute(
+ "SELECT geneId, geneSymbol "
+ "FROM GeneList WHERE "
+ "SpeciesId = %s AND chromosome = %s "
+ "AND (txStart < %s AND txEnd > %s)",
+ (species_id, chr_, mb, mb))
+ else:
+ cursor.execute(
+ "SELECT geneId,geneSymbol "
+ "FROM GeneList WHERE "
+ "chromosome = %s AND "
+ "(txStart < %s AND txEnd > %s)",
+ (chr_, mb, mb))
+ if (result := cursor.fetchone()):
+ return [result[0], result[1]]
+ return ""