aboutsummaryrefslogtreecommitdiff
path: root/web/webqtl/showTrait/ShowTraitPage.py
diff options
context:
space:
mode:
Diffstat (limited to 'web/webqtl/showTrait/ShowTraitPage.py')
-rwxr-xr-xweb/webqtl/showTrait/ShowTraitPage.py170
1 files changed, 170 insertions, 0 deletions
diff --git a/web/webqtl/showTrait/ShowTraitPage.py b/web/webqtl/showTrait/ShowTraitPage.py
new file mode 100755
index 00000000..82511228
--- /dev/null
+++ b/web/webqtl/showTrait/ShowTraitPage.py
@@ -0,0 +1,170 @@
+# 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 2010/10/20
+
+from htmlgen import HTMLgen2 as HT
+
+from base import webqtlConfig
+from utility import webqtlUtil
+from base.webqtlTrait import webqtlTrait
+from base.templatePage import templatePage
+from DataEditingPage import DataEditingPage
+
+
+
+class ShowTraitPage(DataEditingPage):
+
+ def __init__(self, fd, traitInfos = []):
+
+ templatePage.__init__(self, fd)
+
+ if not self.openMysql():
+ return
+
+ TD_LR = HT.TD(height=200,width="100%",bgColor='#eeeeee')
+
+ if traitInfos:
+ 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
+
+ if thisTrait.db.type == "ProbeSet":
+
+ self.cursor.execute('''SELECT Id, Name, FullName, confidentiality, AuthorisedUsers
+ FROM ProbeSetFreeze WHERE Name = "%s"''' % database)
+
+ indId, indName, indFullName, confidential, AuthorisedUsers = self.cursor.fetchall()[0]
+
+ if confidential == 1:
+ access_to_confidential_dataset = 0
+
+ #for the dataset that confidentiality is 1
+ #1. 'admin' and 'root' can see all of the dataset
+ #2. 'user' can see the dataset that AuthorisedUsers contains his id(stored in the Id field of User table)
+ if webqtlConfig.USERDICT[self.privilege] > webqtlConfig.USERDICT['user']:
+ access_to_confidential_dataset = 1
+ else:
+ AuthorisedUsersList=AuthorisedUsers.split(',')
+ if AuthorisedUsersList.__contains__(self.userName):
+ access_to_confidential_dataset = 1
+
+ if not access_to_confidential_dataset:
+ #Error, Confidential Database
+ heading = "Show Database"
+ detail = ["The %s database you selected is not open to the public \
+ at this time, please go back and select other database." % indFullName]
+ self.error(heading=heading,detail=detail,error="Confidential Database")
+ return
+
+ user_ip = fd.remote_ip
+ query = "SELECT count(id) FROM AccessLog WHERE ip_address = %s and \
+ UNIX_TIMESTAMP()-UNIX_TIMESTAMP(accesstime)<86400"
+ self.cursor.execute(query,user_ip)
+ daycount = self.cursor.fetchall()
+ if daycount:
+ daycount = daycount[0][0]
+ if daycount > webqtlConfig.DAILYMAXIMUM:
+ heading = "Retrieve Data"
+ detail = ['For security reasons, the maximum access to a database is \
+ %d times per day per ip address. You have reached the limit, please \
+ try it again tomorrow.' % webqtlConfig.DAILYMAXIMUM]
+ self.error(heading=heading,detail=detail)
+ return
+ else:
+ pass
+ else:
+ pass
+
+ if thisTrait.db.type != 'ProbeSet' and thisTrait.cellid:
+ heading = "Retrieve Data"
+ detail = ['The Record you requested doesn\'t exist!']
+ self.error(heading=heading,detail=detail)
+ return
+
+ #XZ: Aug 23, 2010: I commented out this block because this feature is not used anymore
+ # check if animal information are available
+ """
+ self.cursor.execute('''
+ SELECT
+ SampleXRef.ProbeFreezeId
+ FROM
+ SampleXRef, ProbeSetFreeze
+ WHERE
+ SampleXRef.ProbeFreezeId = ProbeSetFreeze.ProbeFreezeId AND
+ ProbeSetFreeze.Name = "%s"
+ ''' % thisTrait.db.name)
+
+ sampleId = self.cursor.fetchall()
+ if sampleId:
+ thisTrait.strainInfo = 1
+ else:
+ thisTrait.strainInfo = None
+ """
+
+ ##identification, etc.
+ fd.identification = '%s : %s'%(thisTrait.db.shortname,ProbeSetID)
+ thisTrait.returnURL = webqtlConfig.CGIDIR + webqtlConfig.SCRIPTFILE + '?FormID=showDatabase&database=%s\
+ &ProbeSetID=%s&RISet=%s&parentsf1=on' %(database,ProbeSetID,fd.RISet)
+
+ if CellID:
+ fd.identification = '%s/%s'%(fd.identification, CellID)
+ thisTrait.returnURL = '%s&CellID=%s' % (thisTrait.returnURL, CellID)
+
+ #retrieve trait information
+ try:
+ thisTrait.retrieveInfo()
+ thisTrait.retrieveData()
+ self.updMysql()
+ self.cursor.execute("insert into AccessLog(accesstime,ip_address) values(Now(),%s)" ,user_ip)
+ self.openMysql()
+ except:
+ heading = "Retrieve Data"
+ detail = ["The information you requested is not avaiable at this time."]
+ self.error(heading=heading,detail=detail)
+ return
+
+ ##read genotype file
+ fd.RISet = thisTrait.riset
+ fd.readGenotype()
+
+ if webqtlUtil.ListNotNull(map(lambda x:x.var, thisTrait.data.values())):
+ fd.displayVariance = 1
+ fd.varianceDispName = 'SE'
+ fd.formID = 'varianceChoice'
+
+ self.dict['body']= thisTrait
+ DataEditingPage.__init__(self, fd, thisTrait)
+ self.dict['title'] = '%s: Display Trait' % fd.identification
+
+