about summary refs log tree commit diff
diff options
context:
space:
mode:
authorPjotr Prins2016-06-23 06:17:27 +0000
committerPjotr Prins2016-06-23 06:17:27 +0000
commit5e4c967ded2c4146af261914dc30c7e03d575c2b (patch)
treef207d5ca5a5f000f5e99126e7bbe2148327017bf
parent2e8351ee52a67bf7dfee7d323458b3fa80cacf41 (diff)
downloadgenenetwork2-5e4c967ded2c4146af261914dc30c7e03d575c2b.tar.gz
DB: created fetch1 function which can do both SQL and GN_SERVER
-rw-r--r--wqflask/db/call.py17
-rw-r--r--wqflask/db/webqtlDatabaseFunction.py17
2 files changed, 22 insertions, 12 deletions
diff --git a/wqflask/db/call.py b/wqflask/db/call.py
index 6b15abb3..ba6eb149 100644
--- a/wqflask/db/call.py
+++ b/wqflask/db/call.py
@@ -15,6 +15,21 @@ logger = getLogger(__name__ )
 
 from inspect import stack
 
+def fetch1(query, path=None, func=None):
+    """Fetch one result using either a SQL query or the URI path to
+GN_SERVER (when USE_GN_SERVER is True). Apply func to GN_SERVER result
+when set.
+
+    """
+    if USE_GN_SERVER and path:
+        result = gn_server(path)
+        if func != None:
+            return [func(result)]
+        else:
+            return [result]
+    else:
+        return fetchone(query)
+
 def fetchone(query):
     """Return tuple containing one row by calling SQL directly
 
@@ -23,7 +38,7 @@ def fetchone(query):
         def helper(query):
             res = g.db.execute(query)
             return res.fetchone()
-        callername = stack()[1][3]
+        callername = stack()[2][3]
         return logger.sql(callername, query, helper)
 
 def gn_server(path):
diff --git a/wqflask/db/webqtlDatabaseFunction.py b/wqflask/db/webqtlDatabaseFunction.py
index bdc3eeb2..2bc4745b 100644
--- a/wqflask/db/webqtlDatabaseFunction.py
+++ b/wqflask/db/webqtlDatabaseFunction.py
@@ -30,7 +30,7 @@ from base import webqtlConfig
 from utility.tools import USE_GN_SERVER, LOG_SQL
 from utility.benchmark import Bench
 
-from db.call import fetchone, gn_server
+from db.call import fetch1
 
 from utility.logger import getLogger
 logger = getLogger(__name__ )
@@ -52,18 +52,13 @@ def retrieve_species(group):
     """Get the species of a group (e.g. returns string "mouse" on "BXD"
 
     """
-    if USE_GN_SERVER:
-        result = gn_server("/cross/"+group+".json")
-        return result["species"]
-    else:
-        result = fetchone("select Species.Name from Species, InbredSet where InbredSet.Name = '%s' and InbredSet.SpeciesId = Species.Id" % (group))
-        return result[0]
+    result = fetch1("select Species.Name from Species, InbredSet where InbredSet.Name = '%s' and InbredSet.SpeciesId = Species.Id" % (group),"/cross/"+group+".json",lambda r: r["species"])[0]
+    logger.debug("retrieve_species result:",result)
+    return result
+
 
 def getMappingMethod(cursor=None, groupName=None):
-    if USE_GN_SERVER:
-        return gn_server("/cross/"+group+".json")["mapping_method_id"]
-    else:
-        return fetchone("select MappingMethodId from InbredSet where Name= '%s'" % groupName)
+    return fetch1("select MappingMethodId from InbredSet where Name= '%s'" % groupName, "/cross/"+group+".json", lambda r: r["mapping_method_id"])[0]
 
 ###########################################################################
 #input: cursor, inbredSetId (int), strainId (int)