From d0911a04958a04042da02a334ccc528dae79cc17 Mon Sep 17 00:00:00 2001 From: zsloan Date: Fri, 27 Mar 2015 20:28:51 +0000 Subject: Removed everything from 'web' directory except genofiles and renamed the directory to 'genotype_files' --- web/webqtl/updateTrait/DataUpdatePage.py | 738 ------------------------------- 1 file changed, 738 deletions(-) delete mode 100755 web/webqtl/updateTrait/DataUpdatePage.py (limited to 'web/webqtl/updateTrait/DataUpdatePage.py') diff --git a/web/webqtl/updateTrait/DataUpdatePage.py b/web/webqtl/updateTrait/DataUpdatePage.py deleted file mode 100755 index a43f8367..00000000 --- a/web/webqtl/updateTrait/DataUpdatePage.py +++ /dev/null @@ -1,738 +0,0 @@ -# Copyright (C) University of Tennessee Health Science Center, Memphis, TN. -# -# This program is free software: you can redistribute it and/or modify it -# under the terms of the GNU Affero General Public License -# as published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Affero General Public License for more details. -# -# This program is available from Source Forge: at GeneNetwork Project -# (sourceforge.net/projects/genenetwork/). -# -# Contact Drs. Robert W. Williams and Xiaodong Zhou (2010) -# at rwilliams@uthsc.edu and xzhou15@uthsc.edu -# -# -# -# This module is used by GeneNetwork project (www.genenetwork.org) -# -# Created by GeneNetwork Core Team 2010/08/10 -# -# Last updated by GeneNetwork Core Team 2011/04/20 - - - -#DataUpdatePage.py -# -#Classes: -#DataUpagePage -#-KA - - -import string -from htmlgen import HTMLgen2 as HT -import os -import time - -from base.webqtlTrait import webqtlTrait -from base.templatePage import templatePage -from base import webqtlConfig -from utility import webqtlUtil -from dbFunction import webqtlDatabaseFunction - -######################################### -# Update Trait -######################################### - -class DataUpdatePage(templatePage): - - def __init__(self, fd): - - templatePage.__init__(self, fd) - - if not self.updMysql(): - return - - if not fd.genotype: - fd.readGenotype() - fd.strainlist = fd.f1list + fd.strainlist - - fd.readData() - - self.formdata = fd.formdata - self.dict['title'] = 'Data Updating' - - try: - thisTrait = webqtlTrait(fullname=self.formdata.getvalue('fullname'), cursor=self.cursor) - thisTrait.retrieveInfo() - except: - heading = "Updating Database" - detail = ["The trait doesn't exist."] - self.error(heading=heading,detail=detail,error="Error") - return - - if webqtlConfig.USERDICT[self.privilege] >= webqtlConfig.USERDICT['user']: - pass - else: - heading = "Updating Database" - detail = ["You don't have the permission to modify this trait"] - self.error(heading=heading,detail=detail,error="Error") - return - - - status = self.formdata.getvalue('curStatus') - if status == 'updateCheck': #XZhou: Check the change - self.updateCheckPage(fd, thisTrait) - elif status == 'updateResult': #XZhou: make the changes to database - self.updateResultPage(fd, thisTrait) - else: #XZhou: show info retrieved from database - self.dispTraitPage(fd, thisTrait) - - - def dispTraitPage(self, fd, thisTrait): - form = HT.Form(cgi= os.path.join(webqtlConfig.CGIDIR, webqtlConfig.SCRIPTFILE), name='dataInput',submit=HT.Input(type='hidden')) - - #XZhou: This is to show trait info. - recordInfoTable = HT.TableLite(border=0, cellspacing=1, cellpadding=5,align="left") - - for field in thisTrait.db.disfield: - fieldValue = getattr(thisTrait, field) - if not fieldValue: - fieldValue = "" - #fields to be ignored - if field in ("chipid", "genbankid"): - continue - elif field == "comments": - if fieldValue: - comments = string.split(fieldValue, '\n') - title0 = HT.Paragraph("Update History: ", Class="subtitle") - form.append(title0) - history = HT.Blockquote() - for item in comments: - if item: - history.append(item, HT.BR()) - form.append(history) - continue - else: - pass - - if field == 'name' or field == 'units': - form.append(HT.Input(type="hidden",name=field,value=fieldValue)) - if field == 'name': - inputBox = HT.Strong(fieldValue) - else: - continue - elif field == 'pubmed_id': - inputBox = HT.Span(HT.Input(type="text",name=field,size=60, maxlength=255,value=fieldValue)) - warning = HT.Paragraph(Class="fs11 cr") - warning.append('1. Please enter only the PubMed ID integer value into the field above.', HT.BR(), '    Don\'t enter', - ' other characters.', HT.BR()) - warning.append('2. If you modify an existing PubMed ID, changes will affect other records with', HT.BR(), \ - '    the same ID but will NOT affect the phenotype description or trait data.', HT.BR()) - warning.append('3. If your delete an existing PubMed ID, this will not affect any other traits,', HT.BR(), \ - '    including those with the same PubMed ID.', HT.BR()) - warning.append('4. If you enter publication data for a PubMed ID that is already in the database,', HT.BR(), \ - '    then all fields except Phenotype and Trait Data will be ignored.') - inputBox.append(warning) - elif field == 'pre_publication_description' or field == 'post_publication_description' or field == 'original_description' or field == 'owner' or field == 'abstract' or field == 'blatseq' or field == 'targetseq' or field == 'description' or field == 'authors' or field == 'sequence' or field == 'alias' or field == 'probe_target_description': - inputBox = HT.Textarea(name=field, cols=60, rows=4,text=fieldValue) - elif field == 'post_publication_abbreviation' or field == 'pre_publication_abbreviation': - inputBox = HT.Input(type="text",name=field,size=60, maxlength=30,value=fieldValue) - elif field == 'geneid': - inputBox = HT.Input(type="text",name=field,size=60, maxlength=255,value=fieldValue) - recordInfoTable.append(HT.TR( - HT.TD("%s :" % webqtlUtil.formatField(field), Class="fs12 fwb ff1", align="right"), - HT.TD(width=20),HT.TD(inputBox))) - #XZ: homologene is not in thisTrait.db.disfield, so have to do in this way - field = 'homologeneid' - inputBox = HT.Input(type="text",name=field,size=60, maxlength=255,value=thisTrait.homologeneid) - else: - inputBox = HT.Input(type="text",name=field,size=60, maxlength=255,value=fieldValue) - - #XZ: For existing non-confidential phenotype trait, pre_publication_description and pre_publication_abbreviation are not shown to anybody except submitter or admistrator to prevent the trait being set to confidential one. - if thisTrait.db.type == 'Publish' and field == 'pre_publication_description' or field == 'pre_publication_abbreviation': - if not thisTrait.confidential and webqtlConfig.USERDICT[self.privilege] < webqtlConfig.USERDICT['admin'] and self.userName != thisTrait.submitter: - continue - - #XZ and Rob, April 20, 2011: This is to add field and inputBox to table. Note that the change of format to each field(Capitalize) by webqtlUtil.formatField function. - recordInfoTable.append(HT.TR( - HT.TD("%s :" % webqtlUtil.formatField(field), Class="fs12 fwb ff1", align="right", valign="top"), - HT.TD(width=5),HT.TD(inputBox))) - - #XZhou: This is to show trait data. - recordDataTable = HT.Text('Trait data updating is disabled') - - if thisTrait.db.type == 'Publish': - thisTrait.retrieveData() - recordDataTable = HT.TableLite(border=0, width = "90%",cellspacing=2, cellpadding=2) - recordDataTable.append(HT.TR(HT.TD('Strain Name',Class="fs12 ffl fwb",align="Center"), - HT.TD('TraitData',Class="fs12 ffl fwb",align="Center"), - HT.TD('SE',Class="fs12 ffl fwb",align="Center"), - HT.TD('N Per Strain',Class="fs12 ffl fwb",align="Center"), - HT.TD('Strain Name',Class="fs12 ffl fwb",align="Center"), - HT.TD('TraitData',Class="fs12 ffl fwb",align="Center"), - HT.TD('SE',Class="fs12 ffl fwb",align="Center"), - HT.TD('N Per Strain',Class="fs12 ffl fwb",align="Center"))) - tempTR = HT.TR(align="Center") - for i, strainName in enumerate(fd.strainlist): - if thisTrait.data.has_key(strainName): - tdata = thisTrait.data[strainName] - traitVal, traitVar, traitNP = tdata.val, tdata.var, tdata.N - else: - traitVal, traitVar, traitNP = None, None, None - - if traitVal != None: - traitVal = "%2.3f" % traitVal - else: - traitVal = 'x' - if traitVar != None: - traitVar = "%2.3f" % traitVar - else: - traitVar = 'x' - if traitNP != None: - traitNP = "%d" % traitNP - else: - traitNP = 'x' - - tempTR.append(HT.TD(HT.Paragraph(strainName),align='CENTER'), - HT.TD(HT.Input(name=strainName, size=8, maxlength=8, value=traitVal),align='CENTER'), - HT.TD(HT.Input(name='V'+strainName, size=8, maxlength=8, value=traitVar),align='CENTER'), - HT.TD(HT.Input(name='N'+strainName, size=8, maxlength=8, value=traitNP),align='CENTER')) - if i % 2: - recordDataTable.append(tempTR) - tempTR = HT.TR(align="Center") - - if (i+1) % 2: - tempTR.append(HT.TD('')) - tempTR.append(HT.TD('')) - tempTR.append(HT.TD('')) - recordDataTable.append(tempTR) - - updateButton = HT.Input(type='submit',name='submit', value='Submit Change',Class="button") - resetButton = HT.Input(type='reset',Class="button") - - hddn = {'fullname':str(thisTrait), 'FormID':'updateRecord', 'curStatus':'updateCheck', 'RISet':fd.RISet, "incparentsf1":1} - for key in hddn.keys(): - form.append(HT.Input(name=key, value=hddn[key], type='hidden')) - - - ############################# - TD_LR = HT.TD(valign="top",colspan=2,bgcolor="#eeeeee") - - containerTable = HT.TableLite(border=0, width = "90%",cellspacing=0, cellpadding=0) - - mainTitle = HT.Paragraph("Update Info and Data", Class="title") - - title1 = HT.Paragraph("Trait Information: ", Class="subtitle") - - title2 = HT.Paragraph("Trait Data:", Class="subtitle") - - containerTable.append(HT.TR(HT.TD(title1)), HT.TR(HT.TD(HT.BR(),updateButton,resetButton,HT.BR(),HT.BR())), - HT.TR(HT.TD(recordInfoTable)), HT.TR(HT.TD(title2)), HT.TR(HT.TD(HT.BR(),recordDataTable, HT.BR(), HT.BR())), - HT.TR(HT.TD(updateButton,resetButton))) - - form.append(containerTable) - - TD_LR.append(mainTitle, form) - - self.dict['body'] = TD_LR - - def updateCheckPage(self, fd, thisTrait): - form = HT.Form(cgi= os.path.join(webqtlConfig.CGIDIR, webqtlConfig.SCRIPTFILE), name='updateCheck',submit=HT.Input(type='hidden')) - hddn = {'fullname':str(thisTrait), 'FormID':'updateRecord', 'curStatus':'updateResult', 'RISet':fd.RISet, "incparentsf1":1} - - recordInfoTable = HT.TableLite(border=0, cellspacing=1, cellpadding=5,align="left",width="90%") - infoChanges = [] - for field in thisTrait.db.disfield: - #fields to be ignored - #XZ: The stupid htmlgen can not set readonly for input and textarea. This is the only way I can prevent displayed items such as 'original_description', 'submitter' being changed. - if field in ("chipid", "genbankid", "comments", "original_description", "submitter"): - continue - oldValue = getattr(thisTrait, field) - if not oldValue: - oldValue = '' - oldValue = str(oldValue) - modifiedValue = self.formdata.getvalue(field) - if not modifiedValue: - modifiedValue = "" - modifiedValue.strip() - oldValue.strip() - if oldValue == modifiedValue: - form.append(HT.Input(type="hidden",name=field,value=oldValue)) - continue - - oldValue = HT.Paragraph(oldValue, Class="cr") - warning = '' - if field == 'PubMed_ID': - if modifiedValue != "": - try: - modifiedValue = int(modifiedValue) - except: - continue - - #whether new PMID already exists - newPMIDExist = None - if modifiedValue: - self.cursor.execute("SelecT Id from Publication where PubMed_ID = %d" % modifiedValue) - results = self.cursor.fetchall() - if results: - newPMIDExist = results[0][0] - if newPMIDExist: - warning = HT.Paragraph(Class="fs11 cr") - warning.append('This new PubMed_ID already exists in our database. If you still want to change to this very PubMed_ID, the publication information (title, author, journal, etc.) will be replaced by those linked to this new PubMed_ID. That means, all the fields below (if any, except phenotype info and trait value) will be ignored.') - - infoChanges.append(field) - inputBox = HT.Textarea(name=field, cols=50, rows=3,text=modifiedValue, onChange = "Javascript:this.form.curStatus.value='updateCheck';") - recordInfoTable.append( - HT.TR(HT.TD("%s :" % webqtlUtil.formatField(field), Class="fs12 fwb ff1", colspan = 3, valign="top")), - HT.TR(HT.TD(oldValue, valign="top"),HT.TD(width=20),HT.TD( inputBox, warning))) - - #XZ: homologeneid is not in thisTrait.db.disfield - if thisTrait.db.type == "ProbeSet": - field = 'homologeneid' - oldValue = getattr(thisTrait, field) - if not oldValue: - oldValue = '' - oldValue = str(oldValue) - modifiedValue = self.formdata.getvalue(field) - if not modifiedValue: - modifiedValue = "" - modifiedValue.strip() - oldValue.strip() - - if oldValue == modifiedValue: - form.append(HT.Input(type="hidden",name=field,value=oldValue)) - else: - oldValue = HT.Paragraph(oldValue, Class="cr") - warning = '' - infoChanges.append(field) - inputBox = HT.Textarea(name=field, cols=50, rows=3,text=modifiedValue, onChange = "Javascript:this.form.curStatus.value='updateCheck';") - recordInfoTable.append( - HT.TR(HT.TD("%s :" % webqtlUtil.formatField(field), Class="fs12 fwb ff1", colspan = 3, valign="top")), - HT.TR(HT.TD(oldValue, valign="top"),HT.TD(width=20),HT.TD( inputBox, warning))) - - - if infoChanges == []: - recordInfoTable = "" - recordInfoChange = HT.Blockquote('No change has been made.') - else: - hddn['modifiedField'] = string.join(infoChanges, '::') - recordInfoChange = '' - - recordDataChange = HT.Blockquote('Trait data updating is disabled') - recordDataTable = "" - - modifiedVals = [] - modifiedVars = [] - modifiedNps = [] - numDataChanges = 0 - if thisTrait.db.type == 'Publish': - thisTrait.retrieveData() - recordDataTable = HT.TableLite(border=0, width = "90%",cellspacing=2, cellpadding=2) - for i, strainName in enumerate(fd.strainlist): - if thisTrait.data.has_key(strainName): - tdata = thisTrait.data[strainName] - traitVal, traitVar, traitNP = tdata.val, tdata.var, tdata.N - else: - traitVal, traitVar, traitNP = None, None, None - - if traitVal != None: - traitVal = "%2.3f" % traitVal - else: - traitVal = 'x' - if traitVar != None: - traitVar = "%2.3f" % traitVar - else: - traitVar = 'x' - if traitNP != None: - traitNP = "%d" % traitNP - else: - traitNP = 'x' - - try: - modifiedVal = "%2.3f" % fd.allTraitData[strainName].val - except: - modifiedVal = 'x' - try: - modifiedVar = "%2.3f" % fd.allTraitData[strainName].var - except: - modifiedVar = 'x' - try: - modifiedNp = "%d" % fd.allTraitData[strainName].N - except: - modifiedNp = 'x' - - if modifiedVal != traitVal: - recordDataTable.append(HT.TR(HT.TD(HT.Paragraph(strainName + " Value")), - HT.TD(HT.Paragraph(traitVal, Class="cr")), - HT.TD(HT.Input(name=strainName, size=8, maxlength=8, value=modifiedVal, onChange = "Javascript:this.form.curStatus.value='updateCheck';")))) - numDataChanges += 1 - modifiedVals.append(modifiedVal) - else: - form.append(HT.Input(type="hidden",name=strainName,value=traitVal)) - modifiedVals.append(traitVal) - - if modifiedVar != traitVar: - recordDataTable.append(HT.TR(HT.TD(HT.Paragraph(strainName + " SE")), - HT.TD(HT.Paragraph(traitVar, Class="cr")), - HT.TD(HT.Input(name='V'+strainName, size=8, maxlength=8, value=modifiedVar, onChange = "Javascript:this.form.curStatus.value='updateCheck';")))) - numDataChanges += 1 - modifiedVars.append(modifiedVar) - else: - form.append(HT.Input(type="hidden",name='V'+strainName,value=traitVar)) - modifiedVars.append(traitVar) - - if modifiedNp != traitNP: - recordDataTable.append(HT.TR(HT.TD(HT.Paragraph(strainName + " N Per Strain")), - HT.TD(HT.Paragraph(traitNP, Class="cr")), - HT.TD(HT.Input(name='N'+strainName, size=8, maxlength=8, value=modifiedNp, onChange = "Javascript:this.form.curStatus.value='updateCheck';")))) - numDataChanges += 1 - modifiedNps.append(modifiedNp) - else: - form.append(HT.Input(type="hidden",name='N'+strainName,value=traitNP)) - modifiedNps.append(traitNP) - - - if numDataChanges == 0: - recordDataChange = HT.Blockquote('No change has been made.') - recordDataTable = "" - else: - hddn['modifiedDataField'] = 1 - recordDataChange = "" - - #if numDataChanges: - # hddn['val'] = string.join(modifiedVals, ',') - # hddn['var'] = string.join(modifiedVars, ',') - # hddn['np'] = string.join(modifiedNps, ',') - - for key in hddn.keys(): - form.append(HT.Input(name=key, value=hddn[key], type='hidden')) - - ############################# - TD_LR = HT.TD(valign="top",colspan=2,bgcolor="#eeeeee", height=200) - - mainTitle = HT.Paragraph("Update Info and Data", Class="title") - - title1 = HT.Paragraph("Trait Information:", Class="subtitle") - - title2 = HT.Paragraph("Trait Data:", Class="subtitle") - - if numDataChanges or infoChanges: - recordChange = HT.Blockquote('The table below lists all the changes made. The texts in red are the original information stored on the server, the texts to the right are the modified version. ') - updateButton = HT.Input(type='submit',name='submit', value='Update Data',Class="button") - resetButton = HT.Input(type='reset',Class="button") - form.append(title1, HT.Center(updateButton,resetButton), recordInfoChange, recordInfoTable,title2, recordDataChange, HT.Center(recordDataTable,HT.P(),updateButton,resetButton),HT.P()) - TD_LR.append(mainTitle, recordChange, HT.Blockquote(form)) - else: - recordInfoChange = HT.Blockquote("No change has been made") - TD_LR.append(mainTitle, recordInfoChange) - - self.dict['body'] = TD_LR - #self.dict['js1'] = webqtlConfig.resetFieldScript - return - - def updateResultPage(self, fd, thisTrait): - - comments = [] - ctime = time.ctime() - ##Start Updating - dataID = -1 - if thisTrait.db.type == 'Publish': - self.cursor.execute("SelecT PublishXRef.InbredSetId, PublishXRef.DataId, PublishXRef.PublicationId, PublishXRef.PhenotypeId, PublishXRef.Sequence from PublishXRef, PublishFreeze where PublishXRef.InbredSetId= PublishFreeze.InbredSetId and PublishFreeze.Name = '%s' and PublishXRef.Id = %s" % (thisTrait.db.name, thisTrait.name)) - PInbredSetId, dataID, PublicationId, PhenotypeId, Sequence = self.cursor.fetchall()[0] - - modifyField = self.formdata.getvalue('modifiedField') - ###Modify Trait Informations - if modifyField: - modifyField = string.split(modifyField, '::') - comments += modifyField - updateHomologeneid = False - - if thisTrait.db.type == 'Publish': - PhenotypeItemUpdate = [] - PhenotypeItemValues = [] - PublicationItemUpdate = [] - PublicationItemValues = [] - - for item in modifyField: - itemvalue = self.formdata.getvalue(item) - - #XZ: identify Phenotype items - if item in ['pre_publication_description', 'post_publication_description', 'original_description', 'pre_publication_abbreviation', 'post_publication_abbreviation', 'lab_code', 'submitter', 'owner', 'authorized_users', 'units']: - if itemvalue != None: #XZ: the problem is that the item value can not be deleted - PhenotypeItemUpdate.append('%s=%%s' % item) - PhenotypeItemValues.append(itemvalue) - - continue #XZ: this is important to distinguish Phenotype item and Publication item - - elif item == "pubmed_id": - #Only integer allowed in this field - try: - itemvalue = int(itemvalue) - except: - itemvalue = None - - #whether old PMID exists - self.cursor.execute("SelecT PubMed_ID from Publication where Id = %d" % PublicationId) - oldPMID = self.cursor.fetchone() - if oldPMID: - oldPMID = oldPMID[0] - - #whether new PMID already exists - newPMID = None - self.cursor.execute("SelecT Id from Publication where PubMed_ID = %d" % itemvalue) - newPMID = self.cursor.fetchone() - if newPMID: - newPMID = newPMID[0] - - ##the logic is still not very clear here - if newPMID: - #new PMID in record - self.cursor.execute("Update PublishXRef set PublicationId = %d where InbredSetId=%d and PhenotypeId=%d and PublicationId=%d and Sequence=%d" % (newPMID, PInbredSetId, PhenotypeId, PublicationId, Sequence)) - #no need to update other fields - PublicationItemUpdate = [] - break - elif itemvalue: - #have new PMID, but not in record or need to change - self.cursor.execute("Update Publication set pubmed_id=%d where Id = %s" % (itemvalue,PublicationId)) - else: - #no new PMID - if oldPMID: - #remove a pubmed_id, don't know if this ever gonna happen - self.cursor.execute("SelecT max(Id) from Publication") - maxId = self.cursor.fetchone()[0] + 1 - self.cursor.execute("SelecT * from Publication where Id = %d" % PublicationId) - oldRecs = list(self.cursor.fetchone()) - oldRecs[0] = maxId - oldRecs[1] = None - NFields = ['%s'] * len(oldRecs) - query = "insert into Publication Values (%s)" % string.join(NFields, ',') - self.cursor.execute(query, tuple(oldRecs)) - self.cursor.execute("Update PublishXRef set PublicationId = %d where InbredSetId=%d and PhenotypeId=%d and PublicationId=%d and Sequence=%d" % (maxId, PInbredSetId, PhenotypeId, PublicationId, Sequence)) - PublicationId = maxId - pass - else: - pass - continue - else: - pass - - if itemvalue: - PublicationItemUpdate.append('%s=%%s' % item) - PublicationItemValues.append(itemvalue) - - if PhenotypeItemUpdate: - updateStr= string.join(PhenotypeItemUpdate,',') - query = "Update Phenotype set %s where Id = %s" % (updateStr, PhenotypeId) - self.cursor.execute(query,tuple(PhenotypeItemValues)) - - if PublicationItemUpdate: - updateStr= string.join(PublicationItemUpdate,',') - query = "Update Publication set %s where Id = %s" % (updateStr, PublicationId) - self.cursor.execute(query,tuple(PublicationItemValues)) - - else: #ProbeSet or Genotype Data - itemValues = [] - itemUpdate = [] - - for item in modifyField: - itemvalue = self.formdata.getvalue(item) - if itemvalue != None: - itemvalue = string.strip(itemvalue) - else: - pass - if item == 'homologeneid': - updateHomologeneid = True - new_homologeneid = 0 - - if itemvalue and len(itemvalue) > 0: - try: - new_homologeneid = int(itemvalue) - except: - heading = "Record Updating Result" - detail = ["Can't update database. Homologeneid must be integer!"] - self.error(heading=heading,detail=detail,error="Error") - return - else: - itemUpdate.append('%s=%%s' % item) #XZ: Use %% to put a % in the output string - itemValues.append(itemvalue) - - if itemUpdate: - updateStr= string.join(itemUpdate,', ') - comments = "%s modified %s at %s\n" % (self.userName, string.join(comments, ', '), ctime) - if thisTrait.db.type == "ProbeSet":#XZ, June 29, 2010: The algorithm is not good. Need to fix it later. - if thisTrait.chipid in (2,4): - if thisTrait.name[-2:] == '_A': - thisTrait.name = string.replace(thisTrait.name, '_A', '') - elif thisTrait.name[-2:] == '_B': - thisTrait.name = string.replace(thisTrait.name, '_B', '') - else: - pass - query = "Update %s set %s where Name like '%s%%%%'" % (thisTrait.db.type,updateStr,thisTrait.name) - self.cursor.execute(query,tuple(itemValues)) - self.cursor.execute("Update %s set comments = CONCAT(comments,'%s') where Name like '%s%%%%'" % (thisTrait.db.type, comments, thisTrait.name)) - elif thisTrait.sequence: - query = "Update %s set %s where BlatSeq='%s'" % (thisTrait.db.type,updateStr,thisTrait.sequence) - self.cursor.execute(query,tuple(itemValues)) - self.cursor.execute("Update %s set comments = CONCAT(comments,'%s') where BlatSeq='%s'" % (thisTrait.db.type, comments, thisTrait.sequence)) - else: - query = "Update %s set %s where Name='%s'" % (thisTrait.db.type,updateStr,thisTrait.name) - self.cursor.execute(query,tuple(itemValues)) - self.cursor.execute("Update %s set comments = CONCAT(comments,'%s') where Name='%s'" % (thisTrait.db.type, comments, thisTrait.name)) - else: #XZ: Genotype - query = "Update %s set %s where SpeciesId=%s and Name='%s'" % (thisTrait.db.type,updateStr, webqtlDatabaseFunction.retrieveSpeciesId(self.cursor, thisTrait.db.riset), thisTrait.name) - self.cursor.execute(query,tuple(itemValues)) - - if updateHomologeneid: #XZ: to update homologene id must be after updating geneid. - #XZ: In one species, one homologeneid can have multiple geneid. One geneid only can have one homologeneid. - #XZ: In Homologene table, GeneId is unique. - #XZ: Geneid might just being updated. - thisTrait = webqtlTrait(fullname=self.formdata.getvalue('fullname'), cursor=self.cursor) - thisTrait.retrieveInfo() - - if not thisTrait.geneid: - heading = "Record Updating Result" - detail = ["There is no geneid associated with this trait. Can't update homologeneid info"] - self.error(heading=heading,detail=detail,error="Error") - return - else: - query = """ - SELECT Species.TaxonomyId - FROM Species, InbredSet - WHERE InbredSet.Name = '%s' and InbredSet.SpeciesId = Species.Id - """ % thisTrait.db.riset - self.cursor.execute(query) - taxonomyId = self.cursor.fetchone()[0] - - if not new_homologeneid: - query = """DELETE FROM Homologene WHERE GeneId=%s""" % thisTrait.geneid - self.cursor.execute(query) - else: - query = """SELECT GeneId FROM Homologene WHERE GeneId=%s""" % thisTrait.geneid - self.cursor.execute(query) - result = self.cursor.fetchone() - - if not result: - query = """INSERT into Homologene (HomologeneId, GeneId, TaxonomyId) VALUES (%s, %s, %s)""" % (new_homologeneid, thisTrait.geneid, taxonomyId) - self.cursor.execute(query) - else: - query = """UPDATE Homologene SET HomologeneId=%s WHERE GeneId=%s""" % (new_homologeneid, thisTrait.geneid) - self.cursor.execute(query) - - - #XZ: It's critical to get lasted info first, then update gene level info across traits by geneid. - #XZ: Need to build index on GeneId. Otherwise, it's too slow. - if thisTrait.db.type == 'ProbeSet': - thisTrait = webqtlTrait(fullname=self.formdata.getvalue('fullname'), cursor=self.cursor) - thisTrait.retrieveInfo() - - if thisTrait.geneid: - if 'symbol' in modifyField: - if thisTrait.symbol: - query = """UPDATE ProbeSet SET Symbol='%s' WHERE GeneId=%s""" % (thisTrait.symbol, thisTrait.geneid) - else: - query = """UPDATE ProbeSet SET Symbol=NULL WHERE GeneId=%s""" % (thisTrait.geneid) - self.cursor.execute(query) - - if 'alias' in modifyField: - if thisTrait.alias: - query = """UPDATE ProbeSet SET alias='%s' WHERE GeneId=%s""" % (thisTrait.alias, thisTrait.geneid) - else: - query = """UPDATE ProbeSet SET alias=NULL WHERE GeneId=%s""" % (thisTrait.geneid) - self.cursor.execute(query) - - if 'description' in modifyField: - if thisTrait.description: #XZ: Attention, we must use "%s" instead of '%s'. Otherwise, to insert 3'UTR will generate error. - query = """UPDATE ProbeSet SET description="%s" WHERE GeneId=%s""" % (thisTrait.description, thisTrait.geneid) - else: - query = """UPDATE ProbeSet SET description=NULL WHERE GeneId=%s""" % (thisTrait.geneid) - self.cursor.execute(query) - - if 'strand_gene' in modifyField: - if thisTrait.strand_gene: - query = """UPDATE ProbeSet SET Strand_Gene='%s' WHERE GeneId=%s""" % (thisTrait.strand_gene, thisTrait.geneid) - else: - query = """UPDATE ProbeSet SET Strand_Gene=NULL WHERE GeneId=%s""" % (thisTrait.geneid) - self.cursor.execute(query) - - if 'unigeneid' in modifyField: - if thisTrait.unigeneid: - query = """UPDATE ProbeSet SET UniGeneId='%s' WHERE GeneId=%s""" % (thisTrait.unigeneid, thisTrait.geneid) - else: - query = """UPDATE ProbeSet SET UniGeneId=NULL WHERE GeneId=%s""" % (thisTrait.geneid) - self.cursor.execute(query) - - if 'refseq_transcriptid' in modifyField: - if thisTrait.refseq_transcriptid: - query = """UPDATE ProbeSet SET RefSeq_TranscriptId='%s' WHERE GeneId=%s""" % (thisTrait.refseq_transcriptid, thisTrait.geneid) - else: - query = """UPDATE ProbeSet SET RefSeq_TranscriptId=NULL WHERE GeneId=%s""" % (thisTrait.geneid) - self.cursor.execute(query) - - if 'genbankid' in modifyField: - if thisTrait.genbankid: - query = """UPDATE ProbeSet SET GenbankId='%s' WHERE GeneId=%s""" % (thisTrait.genbankid, thisTrait.geneid) - else: - query = """UPDATE ProbeSet SET GenbankId=NULL WHERE GeneId=%s""" % (thisTrait.geneid) - self.cursor.execute(query) - - if 'omim' in modifyField: - if thisTrait.omim: - query = """UPDATE ProbeSet SET OMIM='%s' WHERE GeneId=%s""" % (thisTrait.omim, thisTrait.geneid) - else: - query = """UPDATE ProbeSet SET OMIM=NULL WHERE GeneId=%s""" % (thisTrait.geneid) - self.cursor.execute(query) - - - ###Modify Trait Data - if thisTrait.db.type == 'Publish' and dataID > 0 and fd.formdata.getvalue("modifiedDataField"): - StrainIds = [] - for item in fd.strainlist: - self.cursor.execute('SelecT Id from Strain where Name = "%s"' % item) - StrainId = self.cursor.fetchone() - if not StrainId: - raise ValueError - else: - StrainIds.append(StrainId[0]) - comments.append('Trait Value') - #XZ, 03/05/2009: Xiaodong changed Data to PublishData, SE to PublishSE - self.cursor.execute('delete from PublishData where Id = %d' % dataID) - self.cursor.execute('delete from PublishSE where DataId = %d' % dataID) - self.cursor.execute('delete from NStrain where DataId = %d' % dataID) - - for i, strain in enumerate(fd.strainlist): - sId = StrainIds[i] - if fd.allTraitData.has_key(strain): - tdata = fd.allTraitData[strain] - _val, _var, _N = tdata.val, tdata.var, tdata.N - if _val != None: - #XZ, 03/05/2009: Xiaodong changed Data to PublishData, SE to PublishSE - self.cursor.execute('insert into PublishData values(%d, %d, %s)' % (dataID, sId, _val)) - if _var != None: - self.cursor.execute('insert into PublishSE values(%d, %d, %s)' % (dataID, sId, _var)) - if _N != None: - self.cursor.execute('insert into NStrain values(%d, %d, %s)' % (dataID, sId, _N)) - else: - pass - #end for - else: - pass - TD_LR = HT.TD(valign="top", bgcolor="#eeeeee",height=200,width="100%") - main_title = HT.Paragraph(" Record Updating Result", Class="title") - - TD_LR.append(main_title,HT.Blockquote('Successfully updated record %s in database ' % thisTrait.name, thisTrait.db.genHTML(), '.')) - if thisTrait.db.type == 'Publish': - comments = "%s modified %s at %s\n" % (self.userName, string.join(comments, ', '), ctime) - self.cursor.execute("Update PublishXRef set comments = CONCAT(comments,'%s') where InbredSetId=%d and PhenotypeId=%d and PublicationId=%d and Sequence=%d" % (comments, PInbredSetId, PhenotypeId, PublicationId, Sequence)) - - if 0: - heading = "Record Updating Result" - detail = ["Can't update database. The server may be down at this time or you don't have the permission"] - self.error(heading=heading,detail=detail,error="Error") - return - self.dict['body'] = str(TD_LR) - -- cgit v1.2.3