aboutsummaryrefslogtreecommitdiff
path: root/wqflask
diff options
context:
space:
mode:
authorZachary Sloan2012-09-12 18:22:45 -0500
committerZachary Sloan2012-09-12 18:22:45 -0500
commitf1d7725c5f7529c5f587bab4ea89d3467b903ddb (patch)
tree899dd0c7fe717412bc91b93661fd0498fd227e2f /wqflask
parente7e3117695ef86a28df96cf32bfb66f6da2bc404 (diff)
downloadgenenetwork2-f1d7725c5f7529c5f587bab4ea89d3467b903ddb.tar.gz
Worked towards correctly passing form data to correlation page and addressed various bugs that arose while doing so
Diffstat (limited to 'wqflask')
-rwxr-xr-xwqflask/base/webqtlFormData.py121
-rw-r--r--wqflask/wqflask/correlation/CorrelationPage.py82
-rw-r--r--wqflask/wqflask/static/new/javascript/trait_data_and_analysis.coffee12
-rw-r--r--wqflask/wqflask/static/new/javascript/trait_data_and_analysis.js9
4 files changed, 119 insertions, 105 deletions
diff --git a/wqflask/base/webqtlFormData.py b/wqflask/base/webqtlFormData.py
index a9e3b7d4..177c72a2 100755
--- a/wqflask/base/webqtlFormData.py
+++ b/wqflask/base/webqtlFormData.py
@@ -60,17 +60,12 @@ class webqtlFormData:
print("in webqtlFormData start_vars are:", pf(start_vars))
for item in webqtlFormData.attrs:
self.__dict__[item] = None
- #self.__dict__.update(start_vars)
+
for item in start_vars:
self.__dict__[item] = start_vars[item]
- print(" Now self.dict is:", pf(self.__dict__))
- #for item in self.attrs:
- # if getattr(self, item, None):
- # print("Setting item %s to None" % (item,))
- # self.attrs[item] = None
- # else:
- # self.attrs[item] = self.attrs[item].strip()
+ #print(" Now self.dict is:", pf(self.__dict__))
+ #Todo: This can't be good below...rework
try:
self.remote_ip = req.connection.remote_ip
except:
@@ -151,23 +146,32 @@ class webqtlFormData:
def readGenotype(self):
- 'read genotype from .geno file'
+ '''read genotype from .geno file'''
if self.RISet == 'BXD300':
self.RISet = 'BXD'
- else:
- pass
- assert self.RISet
+
+ assert self.RISet, "self.RISet needs to be set"
+
#genotype_1 is Dataset Object without parents and f1
#genotype_2 is Dataset Object with parents and f1 (not for intercross)
+
self.genotype_1 = reaper.Dataset()
- self.genotype_1.read(os.path.join(webqtlConfig.GENODIR, self.RISet + '.geno'))
+
+ full_filename = os.path.join(webqtlConfig.GENODIR, self.RISet + '.geno')
+
+ # reaper barfs on unicode filenames, so here we ensure it's a string
+ full_filename = str(full_filename)
+ self.genotype_1.read(full_filename)
+
+ print("Got to after read")
+
try:
# NL, 07/27/2010. ParInfo has been moved from webqtlForm.py to webqtlUtil.py;
_f1, _f12, _mat, _pat = webqtlUtil.ParInfo[self.RISet]
- except:
+ except KeyError:
_f1 = _f12 = _mat = _pat = None
- self.genotype_2 =self.genotype_1
+ self.genotype_2 = self.genotype_1
if self.genotype_1.type == "riset" and _mat and _pat:
self.genotype_2 = self.genotype_1.add(Mat=_mat, Pat=_pat) #, F1=_f1)
@@ -177,78 +181,83 @@ class webqtlFormData:
else:
self.incparentsf1 = 0
self.genotype = self.genotype_1
+
self.strainlist = list(self.genotype.prgy)
- self.f1list = self.parlist = []
+ self.f1list = []
+ self.parlist = []
+
if _f1 and _f12:
self.f1list = [_f1, _f12]
if _mat and _pat:
self.parlist = [_mat, _pat]
+
- def readData(self, strainlst=[], incf1=[]):
- 'read user input data or from trait data and analysis form'
+ def readData(self, strainlist, incf1=None):
+ '''read user input data or from trait data and analysis form'''
+
+ if incf1 == None:
+ incf1 = []
if not self.genotype:
self.readGenotype()
- if not strainlst:
+ if not strainlist:
if incf1:
- strainlst = self.f1list + self.strainlist
+ strainlist = self.f1list + self.strainlist
else:
- strainlst = self.strainlist
+ strainlist = self.strainlist
+ #print("before traitfiledata self.traitfile is:", pf(self.traitfile))
- traitfiledata = self.formdata.getfirst('traitfile')
- traitpastedata = self.formdata.getfirst('traitpaste')
- variancefiledata = self.formdata.getfirst('variancefile')
- variancepastedata = self.formdata.getfirst('variancepaste')
- Nfiledata = self.formdata.getfirst('Nfile')
+ traitfiledata = getattr(self, "traitfile", None)
+ traitpastedata = getattr(self, "traitpaste", None)
+ variancefiledata = getattr(self, "variancefile", None)
+ variancepastedata = getattr(self, "variancepaste", None)
+ Nfiledata = getattr(self, "Nfile", None)
+ #### Todo: Rewrite below when we get to someone submitting their own trait #####
if traitfiledata:
- tt = string.split(traitfiledata)
- vals = map(webqtlUtil.StringAsFloat, tt)
+ tt = traitfiledata.split()
+ values = map(webqtlUtil.StringAsFloat, tt)
elif traitpastedata:
- tt = string.split(traitpastedata)
- vals = map(webqtlUtil.StringAsFloat, tt)
+ tt = traitpastedata.split()
+ values = map(webqtlUtil.StringAsFloat, tt)
else:
- vals = map(self.FormDataAsFloat, strainlst)
-
- if len(vals) < len(strainlst):
- vals += [None]*(len(strainlst) - len(vals))
- elif len(vals) > len(strainlst):
- vals = vals[:len(strainlst)]
- else:
- pass
+ values = map(self.FormDataAsFloat, strainlist)
+ if len(values) < len(strainlist):
+ values += [None] * (len(strainlist) - len(values))
+ elif len(values) > len(strainlist):
+ values = values[:len(strainlist)]
+
if variancefiledata:
- tt = string.split(variancefiledata)
- vars = map(webqtlUtil.StringAsFloat, tt)
+ tt = variancefiledata.split()
+ variances = map(webqtlUtil.StringAsFloat, tt)
elif variancepastedata:
- tt = string.split(variancepastedata)
- vars = map(webqtlUtil.StringAsFloat, tt)
+ tt = variancepastedata.split()
+ variances = map(webqtlUtil.StringAsFloat, tt)
else:
- vars = map(self.FormVarianceAsFloat, strainlst)
+ variances = map(self.FormVarianceAsFloat, strainlist)
- if len(vars) < len(strainlst):
- vars += [None]*(len(strainlst) - len(vars))
- elif len(vars) > len(strainlst):
- vars = vars[:len(strainlst)]
- else:
- pass
+ if len(variances) < len(strainlist):
+ variances += [None]*(len(strainlist) - len(variances))
+ elif len(variances) > len(strainlist):
+ variances = variances[:len(strainlist)]
if Nfiledata:
tt = string.split(Nfiledata)
nstrains = map(webqtlUtil.IntAsFloat, tt)
- if len(nstrains) < len(strainlst):
- nstrains += [None]*(len(strainlst) - len(nstrains))
+ if len(nstrains) < len(strainlist):
+ nstrains += [None]*(len(strainlist) - len(nstrains))
else:
- nstrains = map(self.FormNAsFloat, strainlst)
+ nstrains = map(self.FormNAsFloat, strainlist)
- ##vals, vars, nstrains is obsolete
+ ##values, variances, nstrains is obsolete
self.allTraitData = {}
- for i, _strain in enumerate(strainlst):
- if vals[i] != None:
- self.allTraitData[_strain] = webqtlCaseData(vals[i], vars[i], nstrains[i])
+ for i, _strain in enumerate(strainlist):
+ if values[i] != None:
+ self.allTraitData[_strain] = webqtlCaseData(values[i], variances[i], nstrains[i])
diff --git a/wqflask/wqflask/correlation/CorrelationPage.py b/wqflask/wqflask/correlation/CorrelationPage.py
index 9caf6595..62e4c4ab 100644
--- a/wqflask/wqflask/correlation/CorrelationPage.py
+++ b/wqflask/wqflask/correlation/CorrelationPage.py
@@ -177,42 +177,37 @@ def get_custom_trait(form_data, cursor):
#XZ, 09/18/2008: get the information such as value, variance of the input strain names from the form.
-def get_sample_data(form_data):
- if form_data.allstrainlist:
- mdpchoice = form_data.formdata.getvalue('MDPChoice')
- #XZ, in HTML source code, it is "BXD Only" or "BXH only", and so on
+def get_sample_data(fd):
+ print("fd is:", pf(fd.__dict__))
+ if fd.allstrainlist:
+ mdpchoice = fd.MDPChoice
+ #XZ, in HTML source code, it is "BXD Only", "BXH Only", and so on
if mdpchoice == "1":
- strainlist = form_data.f1list + form_data.strainlist
- #XZ, in HTML source code, it is "MDP Only"
+ strainlist = fd.f1list + fd.strainlist
+ #XZ, in HTML source code, it is "Non-BXD Only", "Non-BXD Only", etc
elif mdpchoice == "2":
strainlist = []
- strainlist2 = form_data.f1list + form_data.strainlist
- for strain in form_data.allstrainlist:
+ strainlist2 = fd.f1list + fd.strainlist
+ for strain in fd.allstrainlist:
if strain not in strainlist2:
strainlist.append(strain)
#So called MDP Panel
if strainlist:
- strainlist = form_data.f1list+form_data.parlist+strainlist
+ strainlist = fd.f1list + fd.parlist+strainlist
#XZ, in HTML source code, it is "All Cases"
else:
- strainlist = form_data.allstrainlist
- #XZ, 09/18/2008: put the trait data into dictionary form_data.allTraitData
- form_data.readData(form_data.allstrainlist)
+ strainlist = fd.allstrainlist
+ #XZ, 09/18/2008: put the trait data into dictionary fd.allTraitData
+ fd.readData(fd.allstrainlist)
else:
mdpchoice = None
- strainlist = form_data.strainlist
- #XZ, 09/18/2008: put the trait data into dictionary form_data.allTraitData
- form_data.readData()
+ strainlist = fd.strainlist
+ #XZ, 09/18/2008: put the trait data into dictionary fd.allTraitData
+ fd.readData()
return strainlist
-def get_mdp_choice(form_data):
- if form_data.allstrainlist:
- return form_data.formdata.getvalue("MDPChoice")
- else:
- return None
-
def get_species(fd, cursor):
#XZ, 3/16/2010: variable RISet must be pass by the form
@@ -277,7 +272,7 @@ class CorrelationPage(templatePage):
RANK_ORDERS = {"1": 0, "2": 1, "3": 0, "4": 0, "5": 1}
- def error(self, message, error="Error", heading = None):
+ def error(self, message, *args, **kw):
heading = heading or self.PAGE_HEADING
return templatePage.error(heading = heading, detail = [message], error=error)
@@ -295,23 +290,30 @@ class CorrelationPage(templatePage):
fd.readGenotype()
sample_list = get_sample_data(fd)
- mdp_choice = get_mdp_choice(fd) # No idea what this is yet
+
+ # Whether the user chose BXD Only, Non-BXD Only, or All Strains
+ # (replace BXD with whatever the group/inbredset name is)
+ # "mdp" stands for "mouse diversity panel" This is outdated; it now represents any
+ # cases/strains from the non-primary group
+ mdp_choice = fd.MDPChoice if fd.allstrainlist else None
+
self.species = get_species(fd, self.cursor)
#XZ, 09/18/2008: get all information about the user selected database.
- target_db_name = fd.formdata.getvalue('database')
- self.target_db_name = target_db_name
+ #target_db_name = fd.corr_dataset
+ self.target_db_name = fd.corr_dataset
- try:
- self.db = webqtlDataset(target_db_name, self.cursor)
- except:
- detail = ["The database you just requested has not been established yet."]
- self.error(detail)
- return
+ #try:
+ #print("target_db_name is:", target_db_name)
+ self.db = webqtlDataset(self.target_db_name, self.cursor)
+ #except:
+ # detail = ["The database you just requested has not been established yet."]
+ # self.error(detail)
+ # return
# Auth if needed
try:
- auth_user_for_db(self.db, self.cursor, target_db_name, self.privilege, self.userName)
+ auth_user_for_db(self.db, self.cursor, self.target_db_name, self.privilege, self.userName)
except AuthException, e:
detail = [e.message]
return self.error(detail)
@@ -322,7 +324,7 @@ class CorrelationPage(templatePage):
#CF - If less than a minimum number of strains/cases in common, don't calculate anything
if len(self.sample_names) < self.corrMinInformative:
detail = ['Fewer than %d strain data were entered for %s data set. No calculation of correlation has been attempted.' % (self.corrMinInformative, fd.RISet)]
- self.error(heading=PAGE_HEADING,detail=detail)
+ self.error(heading=None, detail=detail)
self.method = get_correlation_method_key(fd)
@@ -330,15 +332,16 @@ class CorrelationPage(templatePage):
rankOrder = self.RANK_ORDERS[self.method]
# CF - Number of results returned
- self.returnNumber = int(fd.formdata.getvalue('criteria'))
+ self.returnNumber = int(fd.criteria)
self.record_count = 0
myTrait = get_custom_trait(fd, self.cursor)
- # We will not get Literature Correlations if there is no GeneId because there is nothing to look against
- self.gene_id = int(fd.formdata.getvalue('GeneId') or 0)
+ # We will not get Literature Correlations if there is no GeneId because there is nothing
+ # to look against
+ self.gene_id = int(fd.GeneId)
# We will not get Tissue Correlations if there is no gene symbol because there is nothing to look against
self.trait_symbol = myTrait.symbol
@@ -359,7 +362,8 @@ class CorrelationPage(templatePage):
TD_LR = HT.TD(height=200,width="100%",bgColor='#eeeeee')
mainfmName = webqtlUtil.genRandStr("fm_")
- form = HT.Form(cgi= os.path.join(webqtlConfig.CGIDIR, webqtlConfig.SCRIPTFILE), enctype='multipart/form-data', name= mainfmName, submit=HT.Input(type='hidden'))
+ form = HT.Form(cgi = os.path.join(webqtlConfig.CGIDIR, webqtlConfig.SCRIPTFILE),
+ enctype='multipart/form-data', name= mainfmName, submit=HT.Input(type='hidden'))
hddn = {'FormID': 'showDatabase',
'ProbeSetID': '_',
'database': self.target_db_name,
@@ -369,9 +373,9 @@ class CorrelationPage(templatePage):
'identification': fd.identification}
if myTrait:
- hddn['fullname']=fd.formdata.getvalue('fullname')
+ hddn['fullname'] = fd.fullname
if mdp_choice:
- hddn['MDPChoice']=mdp_choice
+ hddn['MDPChoice']= mdp_choice
#XZ, 09/18/2008: pass the trait data to next page by hidden parameters.
diff --git a/wqflask/wqflask/static/new/javascript/trait_data_and_analysis.coffee b/wqflask/wqflask/static/new/javascript/trait_data_and_analysis.coffee
index 3ea90b9c..7bfa6d01 100644
--- a/wqflask/wqflask/static/new/javascript/trait_data_and_analysis.coffee
+++ b/wqflask/wqflask/static/new/javascript/trait_data_and_analysis.coffee
@@ -170,10 +170,14 @@ $ ->
console.log("in beginning of on_corr_submit")
values = $('#trait_data_form').serialize()
console.log("in on_corr_submit, values are:", values)
- $.ajax "/corr_compute",
- type: 'GET'
- dataType: 'html'
- data: values
+
+ params = $.param(values)
+ window.location.href = "/corr_compute?" + params
+
+ #$.ajax "/corr_compute",
+ # type: 'GET'
+ # dataType: 'html'
+ # data: values
$('#corr_compute').click(on_corr_submit)
diff --git a/wqflask/wqflask/static/new/javascript/trait_data_and_analysis.js b/wqflask/wqflask/static/new/javascript/trait_data_and_analysis.js
index 0de0297b..e1f870d9 100644
--- a/wqflask/wqflask/static/new/javascript/trait_data_and_analysis.js
+++ b/wqflask/wqflask/static/new/javascript/trait_data_and_analysis.js
@@ -200,15 +200,12 @@
};
$('select[name=corr_method]').change(on_corr_method_change);
on_corr_submit = function() {
- var values;
+ var params, values;
console.log("in beginning of on_corr_submit");
values = $('#trait_data_form').serialize();
console.log("in on_corr_submit, values are:", values);
- return $.ajax("/corr_compute", {
- type: 'GET',
- dataType: 'html',
- data: values
- });
+ params = $.param(values);
+ return window.location.href = "/corr_compute?" + params;
};
$('#corr_compute').click(on_corr_submit);
/*