about summary refs log tree commit diff
diff options
context:
space:
mode:
authorZachary Sloan2012-11-30 18:03:52 -0600
committerZachary Sloan2012-11-30 18:03:52 -0600
commit43f69f26507d934a15d8e8d20f0ac3023fdb7691 (patch)
tree6f88f014447eed5533e4e8aa46f33a2843867203
parentb8fa8728b7afebbada49f29b85fa5db40e137e1b (diff)
downloadgenenetwork2-43f69f26507d934a15d8e8d20f0ac3023fdb7691.tar.gz
Started switching to using basic sqlalchemy to handle db connection/queries
Began fixing bugs related to this fix, still in progress
-rwxr-xr-xwqflask/base/data_set.py33
-rwxr-xr-xwqflask/base/webqtlConfigLocal.py4
-rwxr-xr-xwqflask/base/webqtlTrait.py69
-rw-r--r--wqflask/cfg/zach_settings.py3
-rw-r--r--wqflask/wqflask/do_search.py24
-rw-r--r--wqflask/wqflask/search_results.py3
-rwxr-xr-xwqflask/wqflask/show_trait/show_trait.py25
-rw-r--r--wqflask/wqflask/views.py14
8 files changed, 106 insertions, 69 deletions
diff --git a/wqflask/base/data_set.py b/wqflask/base/data_set.py
index 633f7545..015b2623 100755
--- a/wqflask/base/data_set.py
+++ b/wqflask/base/data_set.py
@@ -22,6 +22,8 @@
 
 from __future__ import print_function, division
 
+from flask import Flask, g
+
 from htmlgen import HTMLgen2 as HT
 
 import webqtlConfig
@@ -31,25 +33,28 @@ from pprint import pformat as pf
 # Used by create_database to instantiate objects
 DS_NAME_MAP = {}
 
-def create_dataset(db_conn, dataset_name):
-    cursor = db_conn.cursor()
-    cursor.execute("""
+def create_dataset(dataset_name):
+    #cursor = db_conn.cursor()
+    print("dataset_name:", dataset_name)
+    
+    dataset_type = g.db.execute("""
         SELECT DBType.Name
         FROM DBList, DBType
         WHERE DBList.Name = %s and
               DBType.Id = DBList.DBTypeId
-        """, (dataset_name))
-    print("dataset_name:", dataset_name)
-    dataset_type = cursor.fetchone()[0]
-    print("dataset_type:", pf(dataset_type))
+        """, (dataset_name)).fetchone().Name
+   
+    #dataset_type = cursor.fetchone()[0]
+    print("[blubber] dataset_type:", pf(dataset_type))
     
     dataset_ob = DS_NAME_MAP[dataset_type]
     #dataset_class = getattr(data_set, dataset_ob)
-    
+    print("dataset_ob:", dataset_ob)
     print("DS_NAME_MAP:", pf(DS_NAME_MAP))
     
     dataset_class = globals()[dataset_ob]
-    return dataset_class(dataset_name, db_conn)
+    return dataset_class(dataset_name)
+
 
 class DataSet(object):
     """
@@ -58,12 +63,12 @@ class DataSet(object):
 
     """
 
-    def __init__(self, name, db_conn):
+    def __init__(self, name):
 
         assert name
         self.name = name
-        self.db_conn = db_conn
-        self.cursor = self.db_conn.cursor()
+        #self.db_conn = db_conn
+        #self.cursor = self.db_conn.cursor()
         self.id = None
         self.type = None
         self.group = None
@@ -271,7 +276,7 @@ class GenotypeDataSet(DataSet):
     def check_confidentiality(self):
         return geno_mrna_confidentiality(self)
     
-    def get_trait_info(self, trait_list):
+    def get_trait_info(self, trait_list, species=None):
         for this_trait in trait_list:
             if not this_trait.haveinfo:
                 this_trait.retrieveInfo()
@@ -355,7 +360,7 @@ class MrnaAssayDataSet(DataSet):
                                 ProbeFreeze.InbredSetId = InbredSet.Id AND
                                 ProbeFreeze.Id = ProbeSetFreeze.ProbeFreezeId AND
                                 ProbeSetFreeze.Name = "%s"
-                ''' % self.db_conn.escape_string(self.name)
+                ''' % g.db.escape_string(self.name)
 
 
     def check_confidentiality(self):
diff --git a/wqflask/base/webqtlConfigLocal.py b/wqflask/base/webqtlConfigLocal.py
index 5aab48ac..84686234 100755
--- a/wqflask/base/webqtlConfigLocal.py
+++ b/wqflask/base/webqtlConfigLocal.py
@@ -4,12 +4,12 @@
 
 MYSQL_SERVER = 'localhost'
 DB_NAME = 'db_webqtl_zas1024'
-DB_USER = 'webqtlupd'
+DB_USER = 'webqtl'
 DB_PASSWD = 'webqtl'
 
 MYSQL_UPDSERVER = 'localhost'
 DB_UPDNAME = 'db_webqtl_zas1024'
-DB_UPDUSER = 'webqtlupd'
+DB_UPDUSER = 'webqtl'
 DB_UPDPASSWD = 'webqtl'
 
 GNROOT = '/home/zas1024/gn/'
diff --git a/wqflask/base/webqtlTrait.py b/wqflask/base/webqtlTrait.py
index cc0e2321..1dceba08 100755
--- a/wqflask/base/webqtlTrait.py
+++ b/wqflask/base/webqtlTrait.py
@@ -12,6 +12,7 @@ from utility import webqtlUtil
 
 from pprint import pformat as pf
 
+from flask import Flask, g
 
 class webqtlTrait:
     """
@@ -20,38 +21,46 @@ class webqtlTrait:
 
     """
 
-    def __init__(self, db_conn, **kw):
+    def __init__(self, **kw):
         print("in webqtlTrait")
-        self.db_conn = db_conn
-        self.cursor = self.db_conn.cursor()
-        self.dataset = None                  # database object
-        self.name = ''                  # Trait ID, ProbeSet ID, Published ID, etc.
-        self.cellid = ''
-        self.identification = 'un-named trait'
-        self.group = ''
-        self.haveinfo = 0
-        self.sequence = ''              # Blat sequence, available for ProbeSet
-        self.data = {}
-        print("foo")
-        print("kw in webqtlTrait are:", pf(kw))
-        print("printed\n\n")
-        for name, value in kw.items():
-            if self.__dict__.has_key(name):
-                setattr(self, name, value)
-            elif name == 'fullname':
-                name2 = value.split("::")
-                if len(name2) == 2:
-                    self.dataset, self.name = name2
-                elif len(name2) == 3:
-                    self.dataset, self.name, self.cellid = name2
-                else:
-                    raise KeyError, repr(value) + ' parameter format error.'
-            else:
-                raise KeyError, repr(name) + ' not a valid parameter for this class.'
+        #self.db_conn = db_conn
+        #self.cursor = self.db_conn.cursor()
+        self.dataset = kw.get('dataset', None)                  # database object
+        self.name = kw.get('name', None)                 # Trait ID, ProbeSet ID, Published ID, etc.
+        self.cellid = kw.get('cellid', None)
+        self.identification = kw.get('identification', 'un-named trait')
+        self.group = kw.get('group', None)
+        self.haveinfo = kw.get(haveinfo, False)
+        self.sequence = kw.get(sequence, None)              # Blat sequence, available for ProbeSet
+        self.data = kw.get(data, {})
+        
+        if kw.get('fullname'):
+            name2 = value.split("::")
+            if len(name2) == 2:
+                self.dataset, self.name = name2
+            elif len(name2) == 3:
+                self.dataset, self.name, self.cellid = name2
+                
+        #print("foo")
+        #print("kw in webqtlTrait are:", pf(kw))
+        #print("printed\n\n")
+        #for name, value in kw.items():
+        #    if self.__dict__.has_key(name):
+        #        setattr(self, name, value)
+        #    elif name == 'fullname':
+        #        name2 = value.split("::")
+        #        if len(name2) == 2:
+        #            self.dataset, self.name = name2
+        #        elif len(name2) == 3:
+        #            self.dataset, self.name, self.cellid = name2
+        #        else:
+        #            raise KeyError, repr(value) + ' parameter format error.'
+        #    else:
+        #        raise KeyError, repr(name) + ' not a valid parameter for this class.'
 
         if self.dataset and isinstance(self.dataset, basestring):
-            assert self.cursor, "Don't have a cursor"
-            self.dataset = create_dataset(self.db_conn, self.dataset)
+            #assert self.cursor, "Don't have a cursor"
+            self.dataset = create_dataset(self.dataset)
 
         #if self.dataset == None, not from a database
         print("self.dataset is:", self.dataset, type(self.dataset))
@@ -432,7 +441,7 @@ class webqtlTrait:
         self.cursor.execute(query)
         traitInfo = self.cursor.fetchone()
         if traitInfo:
-            self.haveinfo = 1
+            self.haveinfo = True
 
             #XZ: assign SQL query result to trait attributes.
             for i, field in enumerate(self.dataset.display_fields):
diff --git a/wqflask/cfg/zach_settings.py b/wqflask/cfg/zach_settings.py
index ed97f222..8d3bf4ab 100644
--- a/wqflask/cfg/zach_settings.py
+++ b/wqflask/cfg/zach_settings.py
@@ -1,2 +1,5 @@
 LOGFILE = """/tmp/flask_gn_log"""
+
 TRAP_BAD_REQUEST_ERRORS = True
+
+DB_URI = """mysql://webqtl:webqtl@localhost/db_webqtl_zas1024"""
\ No newline at end of file
diff --git a/wqflask/wqflask/do_search.py b/wqflask/wqflask/do_search.py
index 17078802..bae3df08 100644
--- a/wqflask/wqflask/do_search.py
+++ b/wqflask/wqflask/do_search.py
@@ -144,14 +144,22 @@ class PhenotypeSearch(DoSearch):
                     'Publication.Title',
                     'Publication.Authors',
                     'PublishXRef.Id')
+    
+    header_fields = ['',
+                     'Record ID',
+                     'Description',
+                     'Authors',
+                     'Year',
+                     'Max LRS',
+                     'Max LRS Location']
 
     def get_where_clause(self):
         """Generate clause for WHERE portion of query"""
 
         #Todo: Zach will figure out exactly what both these lines mean
         #and comment here
-        if "'" not in self.search_term:
-            search_term = "[[:<:]]" + self.search_term + "[[:>:]]"
+        if "'" not in self.search_term[0]:
+            search_term = "[[:<:]]" + self.search_term[0] + "[[:>:]]"
 
         # This adds a clause to the query that matches the search term
         # against each field in the search_fields tuple
@@ -195,6 +203,10 @@ class GenotypeSearch(DoSearch):
                 FROM GenoXRef, GenoFreeze, Geno """
 
     search_fields = ('Name', 'Chr')
+    
+    header_fields = ['',
+                     'Record ID',
+                     'Location']    
 
     def get_fields_clause(self):
         """Generate clause for part of the WHERE portion of query"""
@@ -203,13 +215,13 @@ class GenotypeSearch(DoSearch):
         # against each field in search_fields (above)
         fields_clause = []
         
-        if "'" not in self.search_term:
-            self.search_term = "[[:<:]]" + self.search_term + "[[:>:]]"
+        if "'" not in self.search_term[0]:
+            self.search_term = "[[:<:]]" + self.search_term[0] + "[[:>:]]"
 
         for field in self.search_fields:
             fields_clause.append('''%s REGEXP "%s"''' % ("%s.%s" % self.mescape(self.dataset.type,
-                                                                               field,
-                                                                               self.search_term)))
+                                                                               field),
+                                                                               self.search_term))
         print("hello ;where_clause is:", pf(fields_clause))
         fields_clause = "(%s)" % ' OR '.join(fields_clause)
 
diff --git a/wqflask/wqflask/search_results.py b/wqflask/wqflask/search_results.py
index c7bbdaf2..04b14e8f 100644
--- a/wqflask/wqflask/search_results.py
+++ b/wqflask/wqflask/search_results.py
@@ -83,7 +83,8 @@ class SearchResultPage(templatePage):
             self.dataset_group_ids = map(lambda x: x[2], results)
         else:
             print("self.dataset is:", pf(self.dataset))
-            self.dataset = create_dataset(self.db_conn, self.dataset)
+            # Replaces a string with an object
+            self.dataset = create_dataset(self.dataset)
             print("self.dataset is now:", pf(self.dataset))
  
         self.search()
diff --git a/wqflask/wqflask/show_trait/show_trait.py b/wqflask/wqflask/show_trait/show_trait.py
index e8ad0b1d..7060f2ea 100755
--- a/wqflask/wqflask/show_trait/show_trait.py
+++ b/wqflask/wqflask/show_trait/show_trait.py
@@ -31,16 +31,15 @@ from pprint import pformat as pf
 
 class ShowTrait(templatePage):
 
-    def __init__(self, fd):
-        self.fd = fd
+    def __init__(self, args):
+        print("in ShowTrait, args are:", args)
+        self.group = args.group
+        self.trait_id = trait_id
+        self.dataset = dataset
 
-        print("red1 fd.group:", fd.group)
-        templatePage.__init__(self, fd)
+        #assert self.openMysql(), "No database!"
 
-        print("red2 fd.group:", fd.group)
-        assert self.openMysql(), "No database!"
-
-        print("red3 fd.group:", fd.group)
+        #print("red3 fd.group:", fd.group)
         this_trait = self.get_this_trait()
 
         print("red4 fd.group:", fd.group)
@@ -183,11 +182,13 @@ class ShowTrait(templatePage):
         #if traitInfos:
         #    database, ProbeSetID, CellID = traitInfos
         #else:
-        dataset = self.fd['dataset']
-        trait_id = self.fd['trait_id']
-        cell_id = self.fd.get('CellID')
+        #dataset = self.fd['dataset']
+        #trait_id = self.fd['trait_id']
+        #cell_id = self.fd.get('CellID')
 
-        this_trait =  webqtlTrait(self.db_conn, dataset=dataset, name=trait_id, cellid=cell_id)
+        this_trait = webqtlTrait(dataset=dataset,
+                                 name=trait_id,
+                                 cellid=cell_id)
 
         ##identification, etc.
         self.fd.identification = '%s : %s' % (this_trait.dataset.shortname, trait_id)
diff --git a/wqflask/wqflask/views.py b/wqflask/wqflask/views.py
index cdc3379f..17dc42fb 100644
--- a/wqflask/wqflask/views.py
+++ b/wqflask/wqflask/views.py
@@ -7,10 +7,12 @@ import simplejson as json
 import yaml
 
 import flask
+import sqlalchemy
+#import config
 
 from wqflask import app
 
-from flask import render_template, request, make_response, Response
+from flask import render_template, request, make_response, Response, Flask, g, config
 
 from wqflask import search_results
 from wqflask.show_trait import show_trait
@@ -27,6 +29,10 @@ from pprint import pformat as pf
 #logging.basicConfig(filename="/tmp/gn_log", level=logging.INFO)
 #_log = logging.getLogger("correlation")
 
+@app.before_request
+def connect_db():
+    print("blue app.config:", app.config, pf(vars(app.config)))
+    g.db = sqlalchemy.create_engine(app.config['DB_URI'])
 
 @app.route("/")
 def index_page():
@@ -86,9 +92,9 @@ def whats_new_page():
 @app.route("/show_trait")
 def show_trait_page():
     # Here it's currently too complicated not to use an fd that is a webqtlFormData
-    fd = webqtlFormData.webqtlFormData(request.args)
-    print("stp y1:", pf(vars(fd)))
-    template_vars = show_trait.ShowTrait(fd)
+    #fd = webqtlFormData.webqtlFormData(request.args)
+    #print("stp y1:", pf(vars(fd)))
+    template_vars = show_trait.ShowTrait(request.args)
     template_vars.js_data = json.dumps(template_vars.js_data,
                                        default=json_default_handler,
                                        indent="   ",