diff options
-rwxr-xr-x | wqflask/base/webqtlTrait.py | 228 | ||||
-rw-r--r-- | wqflask/wqflask/show_trait/show_trait_page.py | 42 |
2 files changed, 145 insertions, 125 deletions
diff --git a/wqflask/base/webqtlTrait.py b/wqflask/base/webqtlTrait.py index f5051e45..c3c0cded 100755 --- a/wqflask/base/webqtlTrait.py +++ b/wqflask/base/webqtlTrait.py @@ -1,3 +1,5 @@ +from __future__ import division, print_function + import string from htmlgen import HTMLgen2 as HT @@ -8,14 +10,18 @@ from webqtlDataset import webqtlDataset from dbFunction import webqtlDatabaseFunction from utility import webqtlUtil +from pprint import pformat as pf + class webqtlTrait: """ - Trait class defines a trait in webqtl, can be either Microarray, + Trait class defines a trait in webqtl, can be either Microarray, Published phenotype, genotype, or user input trait + """ def __init__(self, cursor = None, **kw): + print("in webqtlTrait") self.cursor = cursor self.db = None # database object self.name = '' # Trait ID, ProbeSet ID, Published ID, etc. @@ -25,6 +31,9 @@ class webqtlTrait: 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) @@ -35,28 +44,29 @@ class webqtlTrait: elif len(name2) == 3: self.db, self.name, self.cellid = name2 else: - raise KeyError, `value` + ' parameter format error.' + raise KeyError, repr(value) + ' parameter format error.' else: - raise KeyError, `name`+' not a valid parameter for this class.' - - if self.db and type(self.db) == type("1"): - assert self.cursor + raise KeyError, repr(name) + ' not a valid parameter for this class.' + + if self.db and isinstance(self.db, basestring): + assert self.cursor, "Don't have a cursor" self.db = webqtlDataset(self.db, self.cursor) #if self.db == None, not from a database + print("self.db is:", self.db, type(self.db)) if self.db: if self.db.type == "Temp": self.cursor.execute(''' - SELECT - InbredSet.Name - FROM - InbredSet, Temp - WHERE - Temp.InbredSetId = InbredSet.Id AND + SELECT + InbredSet.Name + FROM + InbredSet, Temp + WHERE + Temp.InbredSetId = InbredSet.Id AND Temp.Name = "%s" - ''' % self.name) + ''', self.name) self.riset = self.cursor.fetchone()[0] - else: + else: self.riset = self.db.getRISet() # @@ -73,8 +83,9 @@ class webqtlTrait: if self.db: if self.db.type == 'ProbeSet': + print("Doing ProbeSet Query") query = ''' - SELECT + SELECT ProbeSet.BlatSeq FROM ProbeSet, ProbeSetFreeze, ProbeSetXRef @@ -84,10 +95,11 @@ class webqtlTrait: ProbeSet.Name = "%s" and ProbeSetFreeze.Name = "%s" ''' % (self.name, self.db.name) + print("query is:", query) self.cursor.execute(query) self.sequence = self.cursor.fetchone()[0] - + def getName(self): str = "" if self.db and self.name: @@ -98,12 +110,12 @@ class webqtlTrait: str = self.description return str - # + # # when user enter a trait or GN generate a trait, user want show the name # not the name that generated by GN randomly, the two follow function are - # used to give the real name and the database. displayName() will show the - # database also, getGivenName() just show the name. - # For other trait, displayName() as same as getName(), getGivenName() as + # used to give the real name and the database. displayName() will show the + # database also, getGivenName() just show the name. + # For other trait, displayName() as same as getName(), getGivenName() as # same as self.name # # Hongqiang 11/29/07 @@ -137,10 +149,10 @@ class webqtlTrait: str += "::" + self.cellid else: str = self.description - + return str - + #def __str__(self): # #return "%s %s" % (self.getName(), self.riset) # return self.getName() @@ -166,7 +178,7 @@ class webqtlTrait: else: result.append(None) return result - + def exportInformative(self, incVar=0): """ export informative strain @@ -195,7 +207,7 @@ class webqtlTrait: assert self.cursor if self.db.type == 'ProbeSet': query = ''' - SELECT + SELECT ProbeSet.BlatSeq FROM ProbeSet, ProbeSetFreeze, ProbeSetXRef @@ -209,40 +221,40 @@ class webqtlTrait: results = self.fetchone() return results[0] - - - + + + def retrieveData(self, strainlist=[]): assert self.db and self.cursor if self.db.type == 'Temp': query = ''' - SELECT - Strain.Name, TempData.value, TempData.SE, TempData.NStrain, TempData.Id - FROM - TempData, Temp, Strain - WHERE - TempData.StrainId = Strain.Id AND - TempData.Id = Temp.DataId AND + SELECT + Strain.Name, TempData.value, TempData.SE, TempData.NStrain, TempData.Id + FROM + TempData, Temp, Strain + WHERE + TempData.StrainId = Strain.Id AND + TempData.Id = Temp.DataId AND Temp.name = '%s' Order BY Strain.Name ''' % self.name #XZ, 03/02/2009: Xiaodong changed Data to PublishData, SE to PublishSE - elif self.db.type == 'Publish': + elif self.db.type == 'Publish': query = ''' - SELECT - Strain.Name, PublishData.value, PublishSE.error, NStrain.count, PublishData.Id - FROM + SELECT + Strain.Name, PublishData.value, PublishSE.error, NStrain.count, PublishData.Id + FROM (PublishData, Strain, PublishXRef, PublishFreeze) - left join PublishSE on + left join PublishSE on (PublishSE.DataId = PublishData.Id AND PublishSE.StrainId = PublishData.StrainId) - left join NStrain on - (NStrain.DataId = PublishData.Id AND - NStrain.StrainId = PublishData.StrainId) - WHERE - PublishXRef.InbredSetId = PublishFreeze.InbredSetId AND - PublishData.Id = PublishXRef.DataId AND PublishXRef.Id = %s AND + left join NStrain on + (NStrain.DataId = PublishData.Id AND + NStrain.StrainId = PublishData.StrainId) + WHERE + PublishXRef.InbredSetId = PublishFreeze.InbredSetId AND + PublishData.Id = PublishXRef.DataId AND PublishXRef.Id = %s AND PublishFreeze.Id = %d AND PublishData.StrainId = Strain.Id Order BY Strain.Name @@ -252,21 +264,21 @@ class webqtlTrait: elif self.cellid: #Probe Data query = ''' - SELECT - Strain.Name, ProbeData.value, ProbeSE.error, ProbeData.Id - FROM - (ProbeData, ProbeFreeze, ProbeSetFreeze, ProbeXRef, + SELECT + Strain.Name, ProbeData.value, ProbeSE.error, ProbeData.Id + FROM + (ProbeData, ProbeFreeze, ProbeSetFreeze, ProbeXRef, Strain, Probe, ProbeSet) - left join ProbeSE on + left join ProbeSE on (ProbeSE.DataId = ProbeData.Id AND ProbeSE.StrainId = ProbeData.StrainId) - WHERE - Probe.Name = '%s' AND ProbeSet.Name = '%s' AND - Probe.ProbeSetId = ProbeSet.Id AND - ProbeXRef.ProbeId = Probe.Id AND - ProbeXRef.ProbeFreezeId = ProbeFreeze.Id AND - ProbeSetFreeze.ProbeFreezeId = ProbeFreeze.Id AND - ProbeSetFreeze.Name = '%s' AND - ProbeXRef.DataId = ProbeData.Id AND + WHERE + Probe.Name = '%s' AND ProbeSet.Name = '%s' AND + Probe.ProbeSetId = ProbeSet.Id AND + ProbeXRef.ProbeId = Probe.Id AND + ProbeXRef.ProbeFreezeId = ProbeFreeze.Id AND + ProbeSetFreeze.ProbeFreezeId = ProbeFreeze.Id AND + ProbeSetFreeze.Name = '%s' AND + ProbeXRef.DataId = ProbeData.Id AND ProbeData.StrainId = Strain.Id Order BY Strain.Name @@ -295,23 +307,23 @@ class webqtlTrait: #Geno Data #XZ: The SpeciesId is not necessary, but it's nice to keep it to speed up database search. query = ''' - SELECT - Strain.Name, GenoData.value, GenoSE.error, GenoData.Id - FROM + SELECT + Strain.Name, GenoData.value, GenoSE.error, GenoData.Id + FROM (GenoData, GenoFreeze, Strain, Geno, GenoXRef) left join GenoSE on (GenoSE.DataId = GenoData.Id AND GenoSE.StrainId = GenoData.StrainId) - WHERE + WHERE Geno.SpeciesId = %s AND Geno.Name = '%s' AND GenoXRef.GenoId = Geno.Id AND - GenoXRef.GenoFreezeId = GenoFreeze.Id AND - GenoFreeze.Name = '%s' AND - GenoXRef.DataId = GenoData.Id AND + GenoXRef.GenoFreezeId = GenoFreeze.Id AND + GenoFreeze.Name = '%s' AND + GenoXRef.DataId = GenoData.Id AND GenoData.StrainId = Strain.Id Order BY Strain.Name ''' % (webqtlDatabaseFunction.retrieveSpeciesId(self.cursor, self.db.riset), self.name, self.db.name) - + self.cursor.execute(query) results = self.cursor.fetchall() self.data.clear() @@ -328,7 +340,7 @@ class webqtlTrait: ndata = item[3] self.data[item[0]] = webqtlCaseData(val, var, ndata) #end for - else: + else: for item in results: val = item[1] if val != None: @@ -341,16 +353,16 @@ class webqtlTrait: #end if else: pass - + def keys(self): return self.__dict__.keys() - + def has_key(self, key): return self.__dict__.has_key(key) - + def items(self): return self.__dict__.items() - + def retrieveInfo(self, QTL = None): assert self.db and self.cursor if self.db.type == 'Publish': @@ -358,22 +370,22 @@ class webqtlTrait: # 'Abstract', 'Journal','Volume','Pages','Month','Year','Sequence',\ # 'Units', 'comments'] query = ''' - SELECT - PublishXRef.Id, Publication.PubMed_ID, - Phenotype.Pre_publication_description, Phenotype.Post_publication_description, Phenotype.Original_description, - Phenotype.Pre_publication_abbreviation, Phenotype.Post_publication_abbreviation, + SELECT + PublishXRef.Id, Publication.PubMed_ID, + Phenotype.Pre_publication_description, Phenotype.Post_publication_description, Phenotype.Original_description, + Phenotype.Pre_publication_abbreviation, Phenotype.Post_publication_abbreviation, Phenotype.Lab_code, Phenotype.Submitter, Phenotype.Owner, Phenotype.Authorized_Users, - Publication.Authors, Publication.Title, Publication.Abstract, - Publication.Journal, Publication.Volume, Publication.Pages, - Publication.Month, Publication.Year, PublishXRef.Sequence, - Phenotype.Units, PublishXRef.comments - FROM - PublishXRef, Publication, Phenotype, PublishFreeze - WHERE - PublishXRef.Id = %s AND - Phenotype.Id = PublishXRef.PhenotypeId AND - Publication.Id = PublishXRef.PublicationId AND - PublishXRef.InbredSetId = PublishFreeze.InbredSetId AND + Publication.Authors, Publication.Title, Publication.Abstract, + Publication.Journal, Publication.Volume, Publication.Pages, + Publication.Month, Publication.Year, PublishXRef.Sequence, + Phenotype.Units, PublishXRef.comments + FROM + PublishXRef, Publication, Phenotype, PublishFreeze + WHERE + PublishXRef.Id = %s AND + Phenotype.Id = PublishXRef.PhenotypeId AND + Publication.Id = PublishXRef.PublicationId AND + PublishXRef.InbredSetId = PublishFreeze.InbredSetId AND PublishFreeze.Id =%s ''' % (self.name, self.db.id) #XZ, 05/08/2009: Xiaodong add this block to use ProbeSet.Id to find the probeset instead of just using ProbeSet.Name @@ -382,7 +394,7 @@ class webqtlTrait: disfieldString = string.join(self.db.disfield,',ProbeSet.') disfieldString = 'ProbeSet.' + disfieldString query = """ - SELECT %s + SELECT %s FROM ProbeSet, ProbeSetFreeze, ProbeSetXRef WHERE ProbeSetXRef.ProbeSetFreezeId = ProbeSetFreeze.Id AND @@ -396,7 +408,7 @@ class webqtlTrait: disfieldString = string.join(self.db.disfield,',Geno.') disfieldString = 'Geno.' + disfieldString query = """ - SELECT %s + SELECT %s FROM Geno, GenoFreeze, GenoXRef WHERE GenoXRef.GenoFreezeId = GenoFreeze.Id AND @@ -408,7 +420,7 @@ class webqtlTrait: query = 'SELECT %s FROM %s WHERE Name = "%s"' % \ (string.join(self.db.disfield,','), self.db.type, self.name) - + self.cursor.execute(query) traitInfo = self.cursor.fetchone() if traitInfo: @@ -457,12 +469,12 @@ class webqtlTrait: if QTL: if self.db.type == 'ProbeSet' and not self.cellid: query = ''' - SELECT - ProbeSetXRef.Locus, ProbeSetXRef.LRS, ProbeSetXRef.pValue, ProbeSetXRef.mean - FROM + SELECT + ProbeSetXRef.Locus, ProbeSetXRef.LRS, ProbeSetXRef.pValue, ProbeSetXRef.mean + FROM ProbeSetXRef, ProbeSet - WHERE - ProbeSetXRef.ProbeSetId = ProbeSet.Id AND + WHERE + ProbeSetXRef.ProbeSetId = ProbeSet.Id AND ProbeSet.Name = "%s" AND ProbeSetXRef.ProbeSetFreezeId =%s ''' % (self.name, self.db.id) @@ -491,11 +503,11 @@ class webqtlTrait: self.locus = self.lrs = "" else: raise KeyError, `self.name`+' information is not found in the database.' - + def genHTML(self, formName = "", dispFromDatabase=0, privilege="guest", userName="Guest", authorized_users=""): if not self.haveinfo: self.retrieveInfo() - + if self.db.type == 'Publish': PubMedLink = "" if self.pubmed_id: @@ -503,14 +515,14 @@ class webqtlTrait: target = "_blank", url = webqtlConfig.PUBMEDLINK_URL % self.pubmed_id) else: PubMedLink = HT.Span("Unpublished : ", Class="fs15") - + if formName: - setDescription2 = HT.Href(url="javascript:showDatabase3('%s','%s','%s','')" % + setDescription2 = HT.Href(url="javascript:showDatabase3('%s','%s','%s','')" % (formName, self.db.name, self.name), Class = "fs14") else: - setDescription2 = HT.Href(url="javascript:showDatabase2('%s','%s','')" % + setDescription2 = HT.Href(url="javascript:showDatabase2('%s','%s','')" % (self.db.name,self.name), Class = "fs14") - + if self.confidential and not webqtlUtil.hasAccessToConfidentialPhenotypeTrait(privilege=privilege, userName=userName, authorized_users=authorized_users): setDescription2.append('RecordID/%s - %s' % (self.name, self.pre_publication_description)) else: @@ -526,12 +538,12 @@ class webqtlTrait: setDescription2.append(' by ') setDescription2.append(HT.Italic('%s, and colleagues' % a1)) setDescription = HT.Span(PubMedLink, setDescription2) - + elif self.db.type == 'Temp': setDescription = HT.Href(text="%s" % (self.description),url="javascript:showDatabase2\ ('%s','%s','')" % (self.db.name,self.name), Class = "fs14") setDescription = HT.Span(setDescription) - + elif self.db.type == 'Geno': # Genome DB only available for single search if formName: setDescription = HT.Href(text="Locus %s [Chr %s @ %s Mb]" % (self.name,self.chr,\ @@ -541,16 +553,16 @@ class webqtlTrait: setDescription = HT.Href(text="Locus %s [Chr %s @ %s Mb]" % (self.name,self.chr,\ '%2.3f' % self.mb),url="javascript:showDatabase2('%s','%s','')" % \ (self.db.name,self.name), Class = "fs14") - + setDescription = HT.Span(setDescription) - + else: if self.cellid: - if formName: + if formName: setDescription = HT.Href(text="ProbeSet/%s/%s" % (self.name, self.cellid),url=\ "javascript:showDatabase3('%s','%s','%s','%s')" % (formName, self.db.name,self.name,self.cellid), \ Class = "fs14") - else: + else: setDescription = HT.Href(text="ProbeSet/%s/%s" % (self.name,self.cellid),url=\ "javascript:showDatabase2('%s','%s','%s')" % (self.db.name,self.name,self.cellid), \ Class = "fs14") @@ -572,10 +584,8 @@ class webqtlTrait: if self.probe_target_description: setDescription.append('; %s' % self.probe_target_description) setDescription = HT.Span(setDescription) - + if self.db.type != 'Temp' and dispFromDatabase: setDescription.append( ' --- FROM : ') setDescription.append(self.db.genHTML(Class='cori')) return setDescription - - diff --git a/wqflask/wqflask/show_trait/show_trait_page.py b/wqflask/wqflask/show_trait/show_trait_page.py index 03f8b9b3..c7d6618e 100644 --- a/wqflask/wqflask/show_trait/show_trait_page.py +++ b/wqflask/wqflask/show_trait/show_trait_page.py @@ -36,29 +36,39 @@ from DataEditingPage import DataEditingPage class ShowTraitPage(DataEditingPage): - def __init__(self, fd, traitInfos = []): + def __init__(self, fd, traitInfos = None): - templatePage.__init__(self, fd) + #templatePage.__init__(self, fd) if not self.openMysql(): return - TD_LR = HT.TD(height=200,width="100%",bgColor='#eeeeee') - + #TD_LR = HT.TD(height=200,width="100%",bgColor='#eeeeee') + print("j2") + # When is traitInfos used? if traitInfos: - database,ProbeSetID,CellID = traitInfos + print("j2.2") + database, ProbeSetID, CellID = traitInfos else: - database = fd.formdata.getfirst('database') - ProbeSetID = fd.formdata.getfirst('ProbeSetID') - CellID = fd.formdata.getfirst('CellID') - try: - thisTrait = webqtlTrait(db=database, name=ProbeSetID, cellid= CellID, cursor=self.cursor) - except: - heading = "Trait Data and Analysis Form" - detail = ["The trait isn't available currently."] - self.error(heading=heading,detail=detail,error="Error") - return - + print("j2.3") + print("fd is:", fd) + database = fd['database'] + ProbeSetID = fd['ProbeSetID'] + print("j2.4") + CellID = fd.get('CellID') + print("j2.6") + + # We're no longer wrapping this in an exception. If we fail, let's fail hard + # Log it and fix it + #try: + print("j3") + thisTrait = webqtlTrait(db=database, name=ProbeSetID, cellid= CellID, cursor=self.cursor) + #except: + # heading = "Trait Data and Analysis Form" + # detail = ["The trait isn't available currently."] + # self.error(heading=heading,detail=detail,error="Error") + # return + print("j4") if thisTrait.db.type == "ProbeSet": self.cursor.execute('''SELECT Id, Name, FullName, confidentiality, AuthorisedUsers |