aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPjotr Prins2015-04-17 14:24:12 +0200
committerPjotr Prins2015-04-17 14:24:12 +0200
commitb86993ddc2b9b0f2637dbf0a87bb01bade4ed4f1 (patch)
tree8f9cf4f8461901e20d703ad440a195c6b6b7316b
parent17f453e50ebac657d9f3096811d92bedc9bfc064 (diff)
parent85ccb971687fda00538b248722454ea2aa514e27 (diff)
downloadgenenetwork2-b86993ddc2b9b0f2637dbf0a87bb01bade4ed4f1.tar.gz
Merge branch 'master' into lmm
-rw-r--r--.gitignore2
-rw-r--r--INSTALL.md26
-rw-r--r--web/images/edit.pngbin0 -> 4322 bytes
-rwxr-xr-xwqflask/wqflask/correlation/show_corr_results.py1
-rwxr-xr-xwqflask/wqflask/correlation_matrix/show_corr_matrix.py1
-rwxr-xr-xwqflask/wqflask/dataSharing/SharingBody.py290
-rwxr-xr-xwqflask/wqflask/dataSharing/SharingInfo.py146
-rwxr-xr-xwqflask/wqflask/dataSharing/SharingInfoAddPage.py47
-rwxr-xr-xwqflask/wqflask/dataSharing/SharingInfoDeletePage.py55
-rwxr-xr-xwqflask/wqflask/dataSharing/SharingInfoEditPage.py51
-rwxr-xr-xwqflask/wqflask/dataSharing/SharingInfoPage.py66
-rwxr-xr-xwqflask/wqflask/dataSharing/SharingInfoUpdatePage.py109
-rwxr-xr-xwqflask/wqflask/dataSharing/SharingListDataSetPage.py99
-rwxr-xr-xwqflask/wqflask/dataSharing/SharingPage.py40
-rwxr-xr-xwqflask/wqflask/dataSharing/__init__.py0
-rwxr-xr-xwqflask/wqflask/docs.py1
-rwxr-xr-xwqflask/wqflask/marker_regression/marker_regression.py2
-rw-r--r--wqflask/wqflask/my_pylmm/pyLMM/convertlmm.py10
-rw-r--r--wqflask/wqflask/my_pylmm/pyLMM/lmm.py5
-rwxr-xr-xwqflask/wqflask/news.py16
-rwxr-xr-xwqflask/wqflask/show_trait/show_trait.py1
-rwxr-xr-xwqflask/wqflask/static/packages/bootstrap/css/docs.css13
-rwxr-xr-xwqflask/wqflask/templates/base.html15
-rwxr-xr-xwqflask/wqflask/templates/docedit.html (renamed from wqflask/wqflask/templates/testhtmleditor.html)8
-rwxr-xr-xwqflask/wqflask/templates/docs.html5
-rwxr-xr-xwqflask/wqflask/templates/index_page.html65
-rwxr-xr-xwqflask/wqflask/templates/news.html21
-rwxr-xr-xwqflask/wqflask/views.py50
-rwxr-xr-xwqflask/wqflask/yaml_data/whats_new.yaml26
29 files changed, 146 insertions, 1025 deletions
diff --git a/.gitignore b/.gitignore
index 1111cbc7..1108f228 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,3 +6,5 @@
web/new_genotypes/HSNIH.json
*.cross
*webqtlConfig.py
+wqflask/secure_server.py
+
diff --git a/INSTALL.md b/INSTALL.md
new file mode 100644
index 00000000..26eacc3a
--- /dev/null
+++ b/INSTALL.md
@@ -0,0 +1,26 @@
+# INSTALL Genenetwork2 (GN2)
+
+## Fetch GN2 from github
+
+Clone the repository (currently ~800Mb) to local
+
+ git clone git@github.com:genenetwork2/genenetwork2.git
+
+## Dependencies
+
+GN2 requires
+
+* redis
+* mysql
+
+## Required python modules
+
+Install the following python modules:
+
+* Flask
+* pyyaml
+* redis
+* qtlreaper
+* numarray
+* pp
+* Flask-SQLAlchemy
diff --git a/web/images/edit.png b/web/images/edit.png
new file mode 100644
index 00000000..dda50521
--- /dev/null
+++ b/web/images/edit.png
Binary files differ
diff --git a/wqflask/wqflask/correlation/show_corr_results.py b/wqflask/wqflask/correlation/show_corr_results.py
index ade2d242..aa37c29e 100755
--- a/wqflask/wqflask/correlation/show_corr_results.py
+++ b/wqflask/wqflask/correlation/show_corr_results.py
@@ -45,7 +45,6 @@ from utility.THCell import THCell
from utility.TDCell import TDCell
from base.trait import GeneralTrait
from base import data_set
-from base.templatePage import templatePage
from utility import webqtlUtil, helper_functions, corr_result_helpers
from dbFunction import webqtlDatabaseFunction
import utility.webqtlUtil #this is for parallel computing only.
diff --git a/wqflask/wqflask/correlation_matrix/show_corr_matrix.py b/wqflask/wqflask/correlation_matrix/show_corr_matrix.py
index d734117e..e1df5b24 100755
--- a/wqflask/wqflask/correlation_matrix/show_corr_matrix.py
+++ b/wqflask/wqflask/correlation_matrix/show_corr_matrix.py
@@ -48,7 +48,6 @@ from utility.THCell import THCell
from utility.TDCell import TDCell
from base.trait import GeneralTrait
from base import data_set
-from base.templatePage import templatePage
from utility import webqtlUtil, helper_functions, corr_result_helpers
from dbFunction import webqtlDatabaseFunction
import utility.webqtlUtil #this is for parallel computing only.
diff --git a/wqflask/wqflask/dataSharing/SharingBody.py b/wqflask/wqflask/dataSharing/SharingBody.py
deleted file mode 100755
index 880161f5..00000000
--- a/wqflask/wqflask/dataSharing/SharingBody.py
+++ /dev/null
@@ -1,290 +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 2010/10/20
-
-sharing_body_string = """
-<TD vAlign=top width="100%" align="left" height=10 bgColor=#eeeeee>
-
- <p style="font-size:18px;font-family:verdana;color:black"><B> Data Set Download</B></p>
- <Form METHOD="get" ACTION="/webqtl/main.py" name="SEARCHFORM">
-
- <TABLE width="800" border="0">
-
- <!-- SPECIES SELECTION -->
- <TR>
- <TD align=right height="35" style="font-size:14px;font-family:verdana;color:black" width="16%">
- <B>Species:</B>
- </TD>
- <TD width="3%">
- </TD>
- <TD NOWRAP width="85%" align="left">
- <DIV Id="menu0">
- <Select NAME="species" size=1 id="species" onchange="fillOptions('species');">
- </Select>
- </DIV>
- </TD>
- </TR>
-
- <!-- GROUP SELECTION -->
- <TR>
- <TD align="right" height="35" style="font-size:14px;font-family:verdana;color:black">
- <B>Group:</B>
- </TD>
- <TD>
- </TD>
- <TD NOWRAP width="85%" align="left">
- <DIV Id="menu1">
-
- <Select NAME="cross" size=1 id="cross" onchange="fillOptions('cross');">
- </Select>
- <input type="button" class="button" value=" Info " onCLick="javascript:crossinfo();">
- </DIV>
- </TD>
- </TR>
-
- <!-- TYPE SELECTION -->
- <TR>
- <TD align=right height=35 style="font-size:14px;font-family:verdana;color:black">
- <B>Type:</B>
- </TD>
- <TD>
- </TD>
- <TD NOWRAP width="85%" align="left">
- <DIV Id="menu2">
- <Select NAME="tissue" size=1 id="tissue" onchange="fillOptions('tissue');">
-
- </Select>
- </DIV>
- </TD>
- </TR>
-
- <!-- DATABASE SELECTION -->
- <TR>
- <TD align=right height=35 style="font-size:14px;font-family:verdana;color:black">
- <B>Database:</B>
- </TD>
- <TD>
- </TD>
- <TD NOWRAP width="85%" align="left">
- <DIV Id="menu3">
- <Select NAME="database" size=1 id="database">
- </Select>
- <input type="button" class="button" value=" Info " onCLick="javascript:databaseinfo();">
- </DIV>
- </TD>
- </TR>
-
-<!-- SEARCH, MAKE DEFAULT, ADVANCED SEARCH -->
- <TR>
- <td></td>
- <td></td>
- <TD ALIGN="left" HEIGHT="40">
- &nbsp;&nbsp;&nbsp;<INPUT TYPE="button" CLASS="button" STYLE="font-size:12px" VALUE="&nbsp;&nbsp;Download&nbsp;&nbsp;" onCLick="javascript:datasetinfo();">
- </TD>
- </TR>
- </TABLE>
-
- <SCRIPT SRC="/javascript/selectDatasetMenu.js"></SCRIPT>
- </FORM>
-
- <p style="font-size:18px;font-family:verdana;color:black"><B> GeneNetwork Accession Number</B></p>
- <form method="get" action="/webqtl/main.py" name="f2" target="_blank">
- <INPUT TYPE="hidden" NAME="FormID" VALUE="sharinginfo">
- <TABLE width="800" border="0">
- <tr>
- <td align=right height="35" style="font-size:14px;font-family:verdana;color:black" width="16%"><b>GN:</b></td>
- <td width=3%></td>
- <td><input type="text" name="GN_AccessionId" size="40" />&nbsp;&nbsp;E.g. 112</td>
- </tr>
- <tr>
- <td></td>
- <td></td>
- <td HEIGHT="40">
- &nbsp;&nbsp;&nbsp;<input type="Submit" class="button" STYLE="font-size:12px" VALUE="&nbsp;&nbsp;&nbsp;Submit&nbsp;&nbsp;&nbsp;">
- </td>
- </tr>
- </table>
- </form>
-
-</td>
-"""
-
-sharinginfo_body_string = """<td>
-<a href="/webqtl/main.py?FormID=sharingListDataset">List of DataSets</a><br>
-<H1 class="title" id="parent-fieldname-title">%s
-<a href="/webqtl/main.py?FormID=sharinginfoedit&GN_AccessionId=%s"><img src="/images/modify.gif" alt="modify this page" border="0" valign="middle"></a>
-<span style="color:red;">%s</span>
-</H1>
-<table border="0" width="100%%">
-<tr>
-<td valign="top" width="50%%">
-<TABLE cellSpacing=0 cellPadding=5 width=100%% border=0>
- <TR><td><b>GN Accession:</b> GN%s</TD></tr>
- <TR><TD><b>GEO Series:</b> %s</TD></TR>
- <TR><TD><b>Title:</b> %s</TD></TR>
- <TR><TD><b>Organism:</b> <a href=http://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?mode=Info&id=%s>%s</a></TD></tr>
- <tr><TD><b>Group:</b> %s</TD></TR>
- <TR><TD><b>Tissue:</b> %s</TD></tr>
- <tr><TD><b>Dataset Status:</b> %s</TD></tr>
- <TR><TD><b>Platforms:</b> %s</TD></TR>
- <TR><TD><b>Normalization:</b> %s</TD></TR>
- <TR><TD><!--Code below to Show hide Contact information -->
- <a href="#" onclick="colapse('answer1')">See Contact Information</a><br>
- <span id="answer1" style="display: none; return: false;">
- %s<br>
- %s<br>
- %s<br>
- %s<br>
- %s, %s %s %s<br>
- Tel. %s<br>
- %s<br>
- <a href="%s">%s</a>
- </span><!--Code above to Show hide Contact information --></TD></TR>
-</TABLE>
-</td>
-<td valign="top" width="50%%">
-<table border="0" width="100%%">
-<tr>
- <td bgcolor="#dce4e1"><b>Download datasets and supplementary data files</b></td>
-</tr>
-<tr>
- <td>%s</td>
-</tr>
-</table>
-</td>
-</tr>
-</table>
-<HR>
-<p>
-<table width="100%%" border="0" cellpadding="5" cellspacing="0">
-<tr><td><span style="font-size:115%%;font-weight:bold;">Summary:</span></td></tr>
- <tr><td> %s<br><br></td></tr>
-<tr><td><span style="font-size:115%%;font-weight:bold;">About the cases used to generate this set of data:</span></td></tr>
- <tr><td> %s<br><br></td></tr>
-<tr><td><span style="font-size:115%%;font-weight:bold;">About the tissue used to generate this set of data:</span></td></tr>
- <tr><td> %s<br><br></td></tr>
-<tr><td><span style="font-size:115%%;font-weight:bold;">About downloading this data set:</span></td></tr>
- <tr><td> %s<br><br></td></tr>
-<tr><td><span style="font-size:115%%;font-weight:bold;">About the array platform:</span></td></tr>
- <tr><td> %s<br><br></td></tr>
-<tr><td><span style="font-size:115%%;font-weight:bold;">About data values and data processing:</span></td></tr>
- <tr><td> %s<br><br></td></tr>
-<tr><td><span style="font-size:115%%;font-weight:bold;">Data source acknowledgment:</span></td></tr>
- <tr><td> %s<br><br></td></tr>
-<tr><td><span style="font-size:115%%;font-weight:bold;">Experiment Type:</span></td></tr>
- <tr><td> %s<br><br></td></tr>
-<tr><td><span style="font-size:115%%;font-weight:bold;">Overall Design:</span></td></tr>
- <tr><td> %s<br><br></td></tr>
-<tr><td><span style="font-size:115%%;font-weight:bold;">Contributor:</span></td></tr>
- <tr><td> %s<br><br></td></tr>
-<tr><td><span style="font-size:115%%;font-weight:bold;">Citation:</span></td></tr>
- <tr><td> %s<br><br></td></tr>
-<tr><td><span style="font-size:115%%;font-weight:bold;">Submission Date:</span></td></tr>
- <tr><td> %s<br><br></td></tr>
-<tr><td><span style="font-size:115%%;font-weight:bold;">Laboratory:</span></td></tr>
- <tr><td> %s<br><br></td></tr>
-<tr><td><span style="font-size:115%%;font-weight:bold;">Samples:</span></td></tr>
- <tr><td> %s<br><br></td></tr>
-</table>
-</p>
-</td>
-"""
-
-sharinginfoedit_body_string = """<td>
-<H1 class="title">%s</H1>
-<script language="javascript">
-function CheckGNAccesionId(){
- if (document.sharinginfoupdate.GN_AccesionId.value.length == 0){
- alert("Please input GN Accesion Id");
- document.sharinginfoupdate.GN_AccesionId.focus();
- return false;
- } else {
- return true;
- }
-}
-</script>
-<table border="0" CELLSPACING="0" CELLPADDING="8">
-<form name="sharinginfoupdate" method="post" action="/webqtl/main.py?FormID=sharinginfoupdate" onsubmit="return CheckGNAccesionId();">
-<input type="hidden" name="Id" value="%s">
-
- <tr><TH COLSPAN=2><h2 class="title">Principal Investigator</h2></TH></tr>
- <tr><td align="right" width="100"><b>Contact Name:</b></td><td width="200"><input type='text' name='Contact_Name' size='90' value='%s'></td></tr>
- <tr><td align="right"><b>Emails:</b></td><td><input type='text' name='Emails' size='90' value='%s'></td></tr>
- <tr><td align="right"><b>Phone:</b></td><td><input type='text' name='Phone' size='90' value='%s'></td></tr>
- <tr><td align="right"><b>URL:</b></td><td><input type='text' name='URL' size='90' value='%s'></td></tr>
- <tr><td align="right"><b>Organization Name:</b></td><td><input type='text' name='Organization_Name' size='90' value='%s'></td></tr>
- <tr><td align="right"><b>Department:</b></td><td><input type='text' name='Department' size='90' value='%s'></td></tr>
- <tr><td align="right"><b>Laboratory:</b></td><td><input type='text' name='Laboratory' size='90' value='%s'></td></tr>
- <tr><td align="right"><b>Address:</b></td><td><input type='text' name='Street' size='90' value='%s'></td></tr>
- <tr><td align="right"><b>City:</b></td><td><input type='text' name='City' size='90' value='%s'></td></tr>
- <tr><td align="right"><b>State:</b></td><td><input type='text' name='State' size='90' value='%s'></td></tr>
- <tr><td align="right"><b>ZIP:</b></td><td><input type='text' name='ZIP' size='90' value='%s'></td></tr>
- <tr><td align="right"><b>Country:</b></td><td><input type='text' name='Country' size='90' value='%s'></td></tr>
-
- <tr><TH COLSPAN=2><h2 class="title">Summary</h2></TH></tr>
- <tr><td align="right"><b>Summary: </b></td><td><TEXTAREA NAME="Summary" cols="77" rows="15">%s</textarea></td></tr>
-
- <tr><TH COLSPAN=2><h2 class="title">Biology</h2></TH></tr>
- <tr><td align="right"><b>Experiment Design:</b></td><td><TEXTAREA NAME="Experiment_Type" cols="77" rows="15">%s</textarea></td></tr>
- <tr><td align="right"><b>About the cases used to<br>generate this set of data:</b></td><td><TEXTAREA NAME="About_Cases" cols="77" rows="15">%s</textarea></td></tr>
- <tr><td align="right"><b>About the tissue used to<br>generate this set of data:</b></td><td><TEXTAREA NAME="About_Tissue" cols="77" rows="15">%s</textarea></td></tr>
-
- <tr><TH COLSPAN=2><h2 class="title">Technique</h2></TH></tr>
- <tr><td align="right"><b>About downloading this data set:</b></td><td><TEXTAREA NAME="About_Download" cols="77" rows="15">%s</textarea></td></tr>
- <tr><td align="right"><b>About the array platform:</b></td><td><TEXTAREA NAME="About_Array_Platform" cols="77" rows="15">%s</textarea></td></tr>
-
- <tr><TH COLSPAN=2><h2 class="title">Bioinformatics</h2></TH></tr>
- <tr><td align="right"><b>About data values and<br>data processing:</b></td><td><TEXTAREA NAME="About_Data_Values_Processing" cols="77" rows="15">%s</textarea></td></tr>
- <tr><td align="right"><b>Overall Design:</b></td><td><TEXTAREA NAME="Overall_Design" cols="77" rows="15">%s</textarea></td></tr>
-
- <tr><TH COLSPAN=2><h2 class="title">Misc</h2></TH></tr>
- <tr><td align="right"><b>Contributor:</b></td><td><TEXTAREA NAME="Contributor" cols="77" rows="15">%s</textarea></td></tr>
- <tr><td align="right"><b>Citation:</b></td><td><TEXTAREA NAME="Citation" cols="77" rows="5">%s</textarea></td></tr>
- <tr><td align="right"><b>Data source acknowledgment:</b></td><td><TEXTAREA NAME="Data_Source_Acknowledge" cols="77" rows="15">%s</textarea></td></tr>
-
- <tr><TH COLSPAN=2><h2 class="title">Administrator ONLY</h2></TH></tr>
- <tr><td align="right"><b>GN Accesion Id:</b></td><td><input type='text' name='GN_AccesionId' size='90' value='%s'></td></tr>
- <tr><td align="right"><b>DB Title in GN:</b></td><td><input type='text' name='InfoPageTitle' size='90' value='%s'></td></tr>
- <tr><td align="right"><b>GEO Series:</b></td><td><input type='text' name='GEO_Series' size='90' value='%s'></td></tr>
- <tr><td align="right"><b>Status:</b></td><td><input type='text' name='Status' size='90' value='%s'></td></tr>
- <tr><td align="right"><b>Title:</b></td><td><input type='text' name='Title' size='90' value='%s'></td></tr>
- <tr><td align="right"><b>Organism_Id (Taxonomy ID):</b></td><td><input type='text' name='Organism_Id' size='90' value='%s'></td></tr>
- <tr><td align="right"><b>Organism:</b></td><td><input type='text' name='Organism' size='90' value='%s'></td></tr>
- <tr><td align="right"><b>Submission Date:</b></td><td><input type='text' name='Submission_Date' size='90' value='%s'></td></tr>
- <tr><td align="right"><b>Platforms:</b></td><td><input type='text' name='Platforms' size='90' value='%s'></td></tr>
- <tr><td align="right"><b>Species:</b></td><td><input type='text' name='Species' size='90' value='%s'></td></tr>
- <tr><td align="right"><b>Tissue:</b></td><td><input type='text' name='Tissue' size='90' value='%s'></td></tr>
- <tr><td align="right"><b>Normalization:</b></td><td><input type='text' name='Normalization' size='90' value='%s'></td></tr>
- <tr><td align="right"><b>Inbred Set:</b></td><td><input type='text' name='InbredSet' size='90' value='%s'></td></tr>
- <tr><td align="right"><b>Info Page Name:</b></td><td><input type='text' name='InfoPageName' size='90' value='%s'></td></tr>
- <tr><td align="right"><b>Samples:</b></td><td><input type='text' name='Samples' size='90' value='%s'></td></tr>
- <tr><td align="right"><b>Authorized Users:</b></td><td><input type='text' name='AuthorizedUsers' size='90' value='%s'></td></tr>
- <tr><td align="right"><b>Progress:</b></td><td><input type='text' name='Progress' size='90' value='%s'></td></tr>
-
- <tr><td> <colspan='2' align="center"><input type="Submit" class="button" style="font-size:12px" value=" Submit "></td></tr>
-
-</form>
-</table>
-</td>"""
diff --git a/wqflask/wqflask/dataSharing/SharingInfo.py b/wqflask/wqflask/dataSharing/SharingInfo.py
deleted file mode 100755
index 41a75222..00000000
--- a/wqflask/wqflask/dataSharing/SharingInfo.py
+++ /dev/null
@@ -1,146 +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 2010/10/20
-
-from __future__ import print_function, division
-
-from pprint import pformat as pf
-from collections import namedtuple
-
-import requests
-
-from dbFunction import webqtlDatabaseFunction
-import SharingBody
-
-#import logging
-#logging.basicConfig(filename="/tmp/flask_gn_log", level=logging.INFO)
-#
-#_log = logging.getLogger("search")
-#_ch = logging.StreamHandler()
-#_log.addHandler(_ch)
-
-
-
-#########################################
-# Sharing Info
-#########################################
-class SharingInfo(object):
-
- def __init__(self, GN_AccessionId, InfoPageName):
- print("In SharingInfo")
- self.GN_AccessionId = GN_AccessionId
- self.InfoPageName = InfoPageName
-
- def getInfo(self):
- cursor = webqtlDatabaseFunction.getCursor()
- if (not cursor):
- return
-
- field_names = """Id, GEO_Series, Status, Title, Organism, Experiment_Type,
- Summary, Overall_Design, Contributor, Citation, Submission_Date,
- Contact_Name, Emails, Phone, URL, Organization_Name, Department,
- Laboratory, Street, City, State, ZIP, Country, Platforms,
- Samples, Species, Normalization, InbredSet, InfoPageName,
- DB_Name, Organism_Id, InfoPageTitle, GN_AccesionId, Tissue,
- AuthorizedUsers, About_Cases, About_Tissue, About_Download,
- About_Array_Platform, About_Data_Values_Processing,
- Data_Source_Acknowledge, Progreso """
-
- # We can use string interpolation here cause we own the string
- sql = """select %s from InfoFiles where """ % (field_names)
- if self.GN_AccessionId:
- sql += "GN_AccesionId = %s"
- cursor.execute(sql, self.GN_AccessionId)
- elif self.InfoPageName:
- sql += "InfoPageName = %s"
- cursor.execute(sql, self.InfoPageName)
- else:
- raise Exception('No correct parameter found')
- info = cursor.fetchone()
-
- info = todict(field_names, info)
-
- # fetch datasets file list
- filelist = []
- if info["GN_AccesionId"]:
- url = "http://atlas.uthsc.edu/scandatasets.php?GN_AccesionId=%s" % (
- info["GN_AccesionId"])
- try:
- response = requests.get(url)
- except Exception as why:
- log.exception("Problem conneting to:", url)
- if response:
- data = response.text
- filelist = data.split()
-
- return info, filelist
-
-
- def getBody(self, infoupdate=""):
- info, filelist = self.getInfo()
- if filelist:
- htmlfilelist = '<ul style="line-height:160%;">\n'
- for i in range(len(filelist)):
- if i%2==0:
- filename = filelist[i]
- filesize = filelist[i+1]
- htmlfilelist += "<li>"
- htmlfilelist += '<a href="ftp://atlas.uthsc.edu/users/shared/Genenetwork/GN%s/%s">%s</a>' % (self.GN_AccessionId, filename, filename)
- htmlfilelist += '&nbsp;&nbsp;&nbsp;'
- #r=re.compile(r'(?<=\d)(?=(\d\d\d)+(?!\d))')
- #htmlfilelist += '[%s&nbsp;B]' % r.sub(r',',filesize)
- if 12 < len(filesize):
- filesize=filesize[0:-12]
- filesize += ' T'
- elif 9 < len(filesize):
- filesize=filesize[0:-9]
- filesize += ' G'
- elif 6 < len(filesize):
- filesize=filesize[0:-6]
- filesize += ' M'
- elif 3 < len(filesize):
- filesize=filesize[0:-3]
- filesize += ' K'
- htmlfilelist += '[%sB]' % filesize
- htmlfilelist += "</li>\n"
- htmlfilelist += "</ul>"
- else:
- htmlfilelist = "Data sets are not available or are not public yet."
-
- return info, htmlfilelist
- #return SharingBody.sharinginfo_body_string % (info[31], info[32], infoupdate, info[32], info[1], info[3], info[30], info[4], info[27], info[33], info[2], info[23], info[26], info[11], info[15], info[16], info[18], info[19], info[20], info[21], info[22], info[13], info[12], info[14], info[14], htmlfilelist, info[6], info[35], info[36], info[37], info[38], info[39], info[40], info[5], info[7], info[8], info[9], info[10], info[17], info[24])
-
-
-def todict(fields, values):
- """Converts sql results into a user friendly dictionary"""
- new_dict = {}
- fields = fields.split(",")
- for counter, field in enumerate(fields):
- field = field.strip()
- value = values[counter]
- if isinstance(value, str):
- value = unicode(value, "utf-8")
- new_dict[field] = value
- return new_dict
diff --git a/wqflask/wqflask/dataSharing/SharingInfoAddPage.py b/wqflask/wqflask/dataSharing/SharingInfoAddPage.py
deleted file mode 100755
index 452fb474..00000000
--- a/wqflask/wqflask/dataSharing/SharingInfoAddPage.py
+++ /dev/null
@@ -1,47 +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 2010/10/20
-
-from base.templatePage import templatePage
-from base import webqtlConfig
-import SharingBody
-import SharingInfo
-
-
-#########################################
-# Sharing Info Edit Page
-#########################################
-class SharingInfoAddPage(templatePage):
-
- def __init__(self, fd=None):
- templatePage.__init__(self, fd)
- if webqtlConfig.USERDICT[self.privilege] >= webqtlConfig.USERDICT['admin']:
- pass
- else:
- heading = "Adding Info"
- detail = ["You don't have the permission to add new dataset"]
- self.error(heading=heading,detail=detail,error="Error")
- return
- self.dict['body'] = SharingBody.sharinginfoedit_body_string % ("Add new dataset", "-1", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "")
diff --git a/wqflask/wqflask/dataSharing/SharingInfoDeletePage.py b/wqflask/wqflask/dataSharing/SharingInfoDeletePage.py
deleted file mode 100755
index a9c785c6..00000000
--- a/wqflask/wqflask/dataSharing/SharingInfoDeletePage.py
+++ /dev/null
@@ -1,55 +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 2010/10/20
-
-from base.templatePage import templatePage
-from base import webqtlConfig
-from dbFunction import webqtlDatabaseFunction
-import SharingBody
-import SharingInfo
-
-
-#########################################
-# Sharing Info Delete Page
-#########################################
-class SharingInfoDeletePage(templatePage):
-
- def __init__(self, fd=None):
- templatePage.__init__(self, fd)
- if webqtlConfig.USERDICT[self.privilege] >= webqtlConfig.USERDICT['admin']:
- pass
- else:
- heading = "Deleting Info"
- detail = ["You don't have the permission to delete this dataset"]
- self.error(heading=heading,detail=detail,error="Error")
- return
- cursor = webqtlDatabaseFunction.getCursor()
- if (not cursor):
- return
- GN_AccessionId = fd.formdata.getvalue('GN_AccessionId')
- sql = "delete from InfoFiles where GN_AccesionId=%s"
- cursor.execute(sql, GN_AccessionId)
- re = cursor.fetchone()
- self.dict['body'] = "Delete dataset info record (GN_AccesionId=%s) successfully." % GN_AccessionId
diff --git a/wqflask/wqflask/dataSharing/SharingInfoEditPage.py b/wqflask/wqflask/dataSharing/SharingInfoEditPage.py
deleted file mode 100755
index c5f4ed22..00000000
--- a/wqflask/wqflask/dataSharing/SharingInfoEditPage.py
+++ /dev/null
@@ -1,51 +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 2010/10/20
-
-from base.templatePage import templatePage
-from base import webqtlConfig
-import SharingBody
-import SharingInfo
-
-
-#########################################
-# Sharing Info Edit Page
-#########################################
-class SharingInfoEditPage(templatePage):
-
- def __init__(self, fd=None):
- templatePage.__init__(self, fd)
- if webqtlConfig.USERDICT[self.privilege] >= webqtlConfig.USERDICT['admin']:
- pass
- else:
- heading = "Editing Info"
- detail = ["You don't have the permission to edit this dataset"]
- self.error(heading=heading,detail=detail,error="Error")
- return
- GN_AccessionId = fd.formdata.getvalue('GN_AccessionId')
- InfoPageName = fd.formdata.getvalue('InfoPageName')
- sharingInfoObject = SharingInfo.SharingInfo(GN_AccessionId, InfoPageName)
- info, filelist = sharingInfoObject.getInfo()
- self.dict['body'] = SharingBody.sharinginfoedit_body_string % (info[31], info[0], info[11], info[12], info[13], info[14], info[15], info[16], info[17], info[18], info[19], info[20], info[21], info[22], info[6], info[5], info[35], info[36], info[37], info[38], info[39], info[7], info[8], info[9], info[40], info[32], info[31], info[1], info[2], info[3], info[30], info[4], info[10], info[23], info[25], info[33], info[26], info[27], info[28], info[24], info[34], info[41])
diff --git a/wqflask/wqflask/dataSharing/SharingInfoPage.py b/wqflask/wqflask/dataSharing/SharingInfoPage.py
deleted file mode 100755
index 7ad44440..00000000
--- a/wqflask/wqflask/dataSharing/SharingInfoPage.py
+++ /dev/null
@@ -1,66 +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 2010/10/20
-
-from __future__ import print_function, division
-
-from pprint import pformat as pf
-
-import urlparse
-
-import flask
-
-from base.templatePage import templatePage
-from base import webqtlConfig
-from dbFunction import webqtlDatabaseFunction
-import SharingBody
-import SharingInfo
-
-
-#########################################
-# Sharing Info Page
-#########################################
-class SharingInfoPage(templatePage):
-
- def __init__(self, fd):
- templatePage.__init__(self, fd)
- self.redirect_url = None # Set if you want a redirect
- print("fd is:", pf(fd.__dict__))
- # Todo: Need a [0] in line below????d
- GN_AccessionId = fd.get('GN_AccessionId') # Used under search datasharing
- InfoPageName = fd.get('database') # Might need to add a [0]
- cursor = webqtlDatabaseFunction.getCursor()
- if InfoPageName and not GN_AccessionId:
- sql = "select GN_AccesionId from InfoFiles where InfoPageName = %s"
- cursor.execute(sql, InfoPageName)
- GN_AccessionId = cursor.fetchone()
- self.redirect_url = urlparse.urljoin(webqtlConfig.ROOT_URL, "/data_sharing?GN_AccessionId=%s" % GN_AccessionId)
- #self.redirect_url = flask.url_for('data_sharing', GN_AccessionId=GN_AccessionId[0])
- print("set self.redirect_url")
- #print("before redirect")
- #return flask.redirect(url)
- #print("after redirect")
- else:
- CauseError
diff --git a/wqflask/wqflask/dataSharing/SharingInfoUpdatePage.py b/wqflask/wqflask/dataSharing/SharingInfoUpdatePage.py
deleted file mode 100755
index 181f2eed..00000000
--- a/wqflask/wqflask/dataSharing/SharingInfoUpdatePage.py
+++ /dev/null
@@ -1,109 +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 2010/10/20
-
-import MySQLdb
-
-from base.templatePage import templatePage
-from base import webqtlConfig
-from dbFunction import webqtlDatabaseFunction
-import SharingBody
-import SharingInfo
-
-#########################################
-# Sharing Info Update Page
-#########################################
-class SharingInfoUpdatePage(templatePage):
-
- def __init__(self, fd=None):
- templatePage.__init__(self, fd)
- if webqtlConfig.USERDICT[self.privilege] >= webqtlConfig.USERDICT['admin']:
- pass
- else:
- heading = "Editing Info"
- detail = ["You don't have the permission to modify this file"]
- self.error(heading=heading,detail=detail,error="Error")
- return
- cursor = webqtlDatabaseFunction.getCursor()
- if (not cursor):
- return
- Id=fd.formdata.getvalue('Id')
- GN_AccesionId=fd.formdata.getvalue('GN_AccesionId')
- GEO_Series=fd.formdata.getvalue('GEO_Series')
- Status=fd.formdata.getvalue('Status')
- Title=fd.formdata.getvalue('Title')
- Organism_Id=fd.formdata.getvalue('Organism_Id')
- Organism=fd.formdata.getvalue('Organism')
- Experiment_Type =fd.formdata.getvalue('Experiment_Type')
- Summary=fd.formdata.getvalue('Summary')
- Overall_Design=fd.formdata.getvalue('Overall_Design')
- Contributor=fd.formdata.getvalue('Contributor')
- Citation=fd.formdata.getvalue('Citation')
- Submission_Date=fd.formdata.getvalue('Submission_Date')
- Contact_Name=fd.formdata.getvalue('Contact_Name')
- Emails=fd.formdata.getvalue('Emails')
- Phone=fd.formdata.getvalue('Phone')
- URL=fd.formdata.getvalue('URL')
- Organization_Name=fd.formdata.getvalue('Organization_Name')
- Department=fd.formdata.getvalue('Department')
- Laboratory=fd.formdata.getvalue('Laboratory')
- Street=fd.formdata.getvalue('Street')
- City=fd.formdata.getvalue('City')
- State=fd.formdata.getvalue('State')
- ZIP=fd.formdata.getvalue('ZIP')
- Country=fd.formdata.getvalue('Country')
- Platforms=fd.formdata.getvalue('Platforms')
- Samples=fd.formdata.getvalue('Samples')
- Species=fd.formdata.getvalue('Species')
- Tissue=fd.formdata.getvalue('Tissue')
- Normalization=fd.formdata.getvalue('Normalization')
- InbredSet=fd.formdata.getvalue('InbredSet')
- InfoPageName=fd.formdata.getvalue('InfoPageName')
- InfoPageTitle=fd.formdata.getvalue('InfoPageTitle')
- About_Cases=fd.formdata.getvalue('About_Cases')
- About_Tissue=fd.formdata.getvalue('About_Tissue')
- About_Download=fd.formdata.getvalue('About_Download')
- About_Array_Platform=fd.formdata.getvalue('About_Array_Platform')
- About_Data_Values_Processing=fd.formdata.getvalue('About_Data_Values_Processing')
- Data_Source_Acknowledge=fd.formdata.getvalue('Data_Source_Acknowledge')
- AuthorizedUsers=fd.formdata.getvalue('AuthorizedUsers')
- Progress=fd.formdata.getvalue('Progress')
- if Id=='-1':
- sharingInfoObject = SharingInfo.SharingInfo(GN_AccesionId, InfoPageName)
- info, filelist = sharingInfoObject.getInfo()
- if info:
- heading = "Editing Info"
- detail = ["The new dataset info record is duplicate."]
- self.error(heading=heading, detail=detail, error="Error")
- return
- sql = """INSERT INTO InfoFiles SET GN_AccesionId=%s, GEO_Series=%s, Status=%s, Title=%s, Organism_Id=%s, Organism=%s, Experiment_Type=%s, Summary=%s, Overall_Design=%s, Contributor=%s, Citation=%s, Submission_Date=%s, Contact_Name=%s, Emails=%s, Phone=%s, URL=%s, Organization_Name=%s, Department=%s, Laboratory=%s, Street=%s, City=%s, State=%s, ZIP=%s, Country=%s, Platforms=%s, Samples=%s, Species=%s, Tissue=%s, Normalization=%s, InbredSet=%s, InfoPageName=%s, InfoPageTitle=%s, About_Cases=%s, About_Tissue=%s, About_Download=%s, About_Array_Platform=%s, About_Data_Values_Processing=%s, Data_Source_Acknowledge=%s, AuthorizedUsers=%s, Progreso=%s"""
- cursor.execute(sql, tuple([GN_AccesionId, GEO_Series, Status, Title, Organism_Id, Organism, Experiment_Type, Summary, Overall_Design, Contributor, Citation, Submission_Date, Contact_Name, Emails, Phone, URL, Organization_Name, Department, Laboratory, Street, City, State, ZIP, Country, Platforms, Samples, Species, Tissue, Normalization, InbredSet, InfoPageName, InfoPageTitle, About_Cases, About_Tissue, About_Download, About_Array_Platform, About_Data_Values_Processing, Data_Source_Acknowledge, AuthorizedUsers, Progress]))
- infoupdate="This record has been succesfully added."
- else:
- sql = """UPDATE InfoFiles SET GN_AccesionId=%s, GEO_Series=%s, Status=%s, Title=%s, Organism_Id=%s, Organism=%s, Experiment_Type=%s, Summary=%s, Overall_Design=%s, Contributor=%s, Citation=%s, Submission_Date=%s, Contact_Name=%s, Emails=%s, Phone=%s, URL=%s, Organization_Name=%s, Department=%s, Laboratory=%s, Street=%s, City=%s, State=%s, ZIP=%s, Country=%s, Platforms=%s, Samples=%s, Species=%s, Tissue=%s, Normalization=%s, InbredSet=%s, InfoPageName=%s, InfoPageTitle=%s, About_Cases=%s, About_Tissue=%s, About_Download=%s, About_Array_Platform=%s, About_Data_Values_Processing=%s, Data_Source_Acknowledge=%s, AuthorizedUsers=%s, Progreso=%s WHERE Id=%s"""
- cursor.execute(sql, tuple([GN_AccesionId, GEO_Series, Status, Title, Organism_Id, Organism, Experiment_Type, Summary, Overall_Design, Contributor, Citation, Submission_Date, Contact_Name, Emails, Phone, URL, Organization_Name, Department, Laboratory, Street, City, State, ZIP, Country, Platforms, Samples, Species, Tissue, Normalization, InbredSet, InfoPageName, InfoPageTitle, About_Cases, About_Tissue, About_Download, About_Array_Platform, About_Data_Values_Processing, Data_Source_Acknowledge, AuthorizedUsers, Progress, Id]))
- infoupdate="This record has been succesfully updated."
- sharingInfoObject = SharingInfo.SharingInfo(GN_AccesionId, InfoPageName)
- self.dict['body'] = sharingInfoObject.getBody(infoupdate=infoupdate)
diff --git a/wqflask/wqflask/dataSharing/SharingListDataSetPage.py b/wqflask/wqflask/dataSharing/SharingListDataSetPage.py
deleted file mode 100755
index 8685ac65..00000000
--- a/wqflask/wqflask/dataSharing/SharingListDataSetPage.py
+++ /dev/null
@@ -1,99 +0,0 @@
-#
-# 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 base.templatePage import templatePage
-
-
-#########################################
-# Sharing List DataSet Page
-#########################################
-class SharingListDataSetPage(templatePage):
-
- def __init__(self, fd=None):
- templatePage.__init__(self, fd)
-
- if not self.openMysql():
- return
-
- if webqtlConfig.USERDICT[self.privilege] >= webqtlConfig.USERDICT['admin']:
- pass
- else:
- heading = "Editing Info"
- detail = ["You don't have the permission to list the datasets"]
- self.error(heading=heading,detail=detail,error="Error")
- return
-
-
- TD_LR = HT.TD(height=200,width="100%",bgColor='#eeeeee')
-
- query = """select GN_AccesionId, InfoPageTitle, Progreso from InfoFiles order by GN_AccesionId"""
- self.cursor.execute(query)
- result = self.cursor.fetchall()
-
- heading = HT.Paragraph('Dataset Table', Class="title")
-
- newrecord = HT.Href(text="New Record", url="/webqtl/main.py?FormID=sharinginfoadd")
-
- info = "Click the accession id to view the dataset info. Click the dataset name to edit the dataset info."
-
- datasetTable = HT.TableLite(border=0, cellpadding=0, cellspacing=0, Class="collap", width="100%")
-
- tableHeaderRow = HT.TR()
- tableHeaderRow.append(HT.TD("Accession Id", Class='fs14 fwb ffl b1 cw cbrb', align="center"))
- tableHeaderRow.append(HT.TD("Dataset name", Class='fs14 fwb ffl b1 cw cbrb', align="center"))
- tableHeaderRow.append(HT.TD("Progress", Class='fs14 fwb ffl b1 cw cbrb', align="center"))
- tableHeaderRow.append(HT.TD("Operation", Class='fs14 fwb ffl b1 cw cbrb', align="center"))
- datasetTable.append(tableHeaderRow)
-
- for one_row in result:
- Accession_Id, InfoPage_title, Progress = one_row
- datasetRow = HT.TR()
- datasetRow.append(HT.TD(HT.Href(text="GN%s" % Accession_Id, url="/webqtl/main.py?FormID=sharinginfo&GN_AccessionId=%s" % Accession_Id, Class='fs12 fwn'), Class="fs12 fwn b1 c222"))
- datasetRow.append(HT.TD(HT.Href(text="%s" % InfoPage_title, url="/webqtl/main.py?FormID=sharinginfo&GN_AccessionId=%s" % Accession_Id, Class='fs12 fwn'), Class="fs12 fwn b1 c222"))
- datasetRow.append(HT.TD("%s" % Progress, Class='fs12 fwn ffl b1 c222'))
- operation_edit = HT.Href(text="Edit", url="/webqtl/main.py?FormID=sharinginfoedit&GN_AccessionId=%s" % Accession_Id)
- operation_delete = HT.Href(text="Delete", onClick="deleteRecord(%s); return false;" % Accession_Id)
- operation = HT.TD(Class="fs12 fwn b1 c222", align="center")
- operation.append(operation_edit)
- operation.append("&nbsp;&nbsp;&nbsp;&nbsp;")
- operation.append(operation_delete)
- datasetRow.append(operation)
- datasetTable.append(datasetRow)
-
- TD_LR.append(heading, HT.P(), newrecord, HT.P(), info, HT.P(), datasetTable)
-
- js1 = """ <script language="javascript" type="text/javascript">
- function deleteRecord(id){
- question = confirm("Are you sure you want to delete the dataset info record (Accession Id="+id+")?")
- if (question != "0"){
- window.open("/webqtl/main.py?FormID=sharinginfodelete&GN_AccessionId="+id, "_self");
- }
- }
- </script>"""
- self.dict['js1'] = js1
- self.dict['body'] = str(TD_LR)
diff --git a/wqflask/wqflask/dataSharing/SharingPage.py b/wqflask/wqflask/dataSharing/SharingPage.py
deleted file mode 100755
index b244a6bd..00000000
--- a/wqflask/wqflask/dataSharing/SharingPage.py
+++ /dev/null
@@ -1,40 +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 2010/10/20
-
-from base.templatePage import templatePage
-import SharingBody
-
-#########################################
-# SharingPage
-#########################################
-
-class SharingPage(templatePage):
-
- def __init__(self, fd):
- templatePage.__init__(self, fd)
- self.dict['title'] = 'GeneNetwork Data Sharing Zone'
- self.dict['body'] = SharingBody.sharing_body_string
- self.dict['js2'] = 'onload="javascript:initialDatasetSelection();"'
diff --git a/wqflask/wqflask/dataSharing/__init__.py b/wqflask/wqflask/dataSharing/__init__.py
deleted file mode 100755
index e69de29b..00000000
--- a/wqflask/wqflask/dataSharing/__init__.py
+++ /dev/null
diff --git a/wqflask/wqflask/docs.py b/wqflask/wqflask/docs.py
index 65255987..07b0b81a 100755
--- a/wqflask/wqflask/docs.py
+++ b/wqflask/wqflask/docs.py
@@ -11,5 +11,6 @@ class Docs(object):
WHERE Docs.entry LIKE '%s'
"""
result = g.db.execute(sql % (entry)).fetchone()
+ self.entry = entry
self.title = result[0]
self.content = result[1]
diff --git a/wqflask/wqflask/marker_regression/marker_regression.py b/wqflask/wqflask/marker_regression/marker_regression.py
index 3fb9915b..7708356b 100755
--- a/wqflask/wqflask/marker_regression/marker_regression.py
+++ b/wqflask/wqflask/marker_regression/marker_regression.py
@@ -701,7 +701,7 @@ class MarkerRegression(object):
no_val_samples = self.identify_empty_samples()
trimmed_genotype_data = self.trim_genotypes(genotype_data, no_val_samples)
- genotype_matrix = np.array(trimmed_genotype_data).T
+ genotype_matrix = np.array(genotype_data).T
#print("pheno_vector: ", pf(pheno_vector))
#print("genotype_matrix: ", pf(genotype_matrix))
diff --git a/wqflask/wqflask/my_pylmm/pyLMM/convertlmm.py b/wqflask/wqflask/my_pylmm/pyLMM/convertlmm.py
index 3b6b5d70..4312fed0 100644
--- a/wqflask/wqflask/my_pylmm/pyLMM/convertlmm.py
+++ b/wqflask/wqflask/my_pylmm/pyLMM/convertlmm.py
@@ -1,5 +1,5 @@
-# This is a converter for common LMM formats, so as to keep complexity
-# outside the main routines.
+# This is a converter for common LMM formats, so as to keep file
+# reader complexity outside the main routines.
# Copyright (C) 2015 Pjotr Prins (pjotr.prins@thebird.nl)
#
@@ -31,6 +31,12 @@ python convertlmm.py [--plink] [--prefix out_basename] [--kinship kfile] [--phen
Convert files for runlmm.py processing. Writes to stdout by default.
try --help for more information
+
+Examples:
+
+ python ./my_pylmm/pyLMM/convertlmm.py --plink --pheno data/test_snps.132k.clean.noX.fake.phenos > test.pheno
+
+ python ./my_pylmm/pyLMM/convertlmm.py --plink --pheno data/test_snps.132k.clean.noX.fake.phenos --geno data/test_snps.132k.clean.noX > test.geno
"""
# if len(args) == 0:
diff --git a/wqflask/wqflask/my_pylmm/pyLMM/lmm.py b/wqflask/wqflask/my_pylmm/pyLMM/lmm.py
index 6f03eaf7..b2067b27 100644
--- a/wqflask/wqflask/my_pylmm/pyLMM/lmm.py
+++ b/wqflask/wqflask/my_pylmm/pyLMM/lmm.py
@@ -43,13 +43,14 @@ Redis = Redis()
import sys
sys.path.append("/home/zas1024/gene/wqflask/")
-sys.path.append("/home/danny/GeneNetwork/wqflask/wqflask/my_pylmm/pyLMM/")
-print("sys.path2:", sys.path)
has_gn2=True
from utility.benchmark import Bench
from utility import temp_data
+
+sys.path.append("/home/zas1024/gene/wqflask/wqflask/my_pylmm/pyLMM/")
+
from kinship import kinship, kinship_full, kvakve
import genotype
import phenotype
diff --git a/wqflask/wqflask/news.py b/wqflask/wqflask/news.py
new file mode 100755
index 00000000..62dc1bbb
--- /dev/null
+++ b/wqflask/wqflask/news.py
@@ -0,0 +1,16 @@
+from __future__ import absolute_import, print_function, division
+import sys
+reload(sys)
+sys.setdefaultencoding('utf8')
+from flask import g
+
+class News(object):
+
+ def __init__(self):
+ sql = """
+ SELECT News.id, News.date, News.details
+ FROM News
+ order by News.date desc
+ """
+ self.title = "GeneNetwork News"
+ self.newslist = g.db.execute(sql).fetchall()
diff --git a/wqflask/wqflask/show_trait/show_trait.py b/wqflask/wqflask/show_trait/show_trait.py
index 11fd2644..929f5abb 100755
--- a/wqflask/wqflask/show_trait/show_trait.py
+++ b/wqflask/wqflask/show_trait/show_trait.py
@@ -19,7 +19,6 @@ from utility import webqtlUtil, Plot, Bunch, helper_functions
from base.trait import GeneralTrait
from base import data_set
from dbFunction import webqtlDatabaseFunction
-from base.templatePage import templatePage
from basicStatistics import BasicStatisticsFunctions
from pprint import pformat as pf
diff --git a/wqflask/wqflask/static/packages/bootstrap/css/docs.css b/wqflask/wqflask/static/packages/bootstrap/css/docs.css
index b95c44ed..2d6a713c 100755
--- a/wqflask/wqflask/static/packages/bootstrap/css/docs.css
+++ b/wqflask/wqflask/static/packages/bootstrap/css/docs.css
@@ -25,25 +25,28 @@ h3 code {
/* Tweak navbar brand link to be super sleek
-------------------------------------------------- */
-
+/*
body > .navbar {
font-size: 12px;
font-weight: bold;
}
+*/
/* Change the docs' brand */
-body > .navbar .brand {
- padding-right: 0;
- padding-left: 0;
+
+body > .navbar .navbar-brand {
+ padding-right: 20px;
+ padding-left: 20px;
margin-left: 20px;
float: left;
font-weight: bold;
- color: #336699;
+ color: #ffffff;
text-shadow: 0 1px 0 rgba(255,255,255,.1), 0 0 30px rgba(255,255,255,.125);
-webkit-transition: all .2s linear;
-moz-transition: all .2s linear;
transition: all .2s linear;
}
+
body > .navbar .brand:hover {
text-decoration: none;
text-shadow: 0 1px 0 rgba(255,255,255,.1), 0 0 30px rgba(255,255,255,.4);
diff --git a/wqflask/wqflask/templates/base.html b/wqflask/wqflask/templates/base.html
index 3d4e6d28..462a59a2 100755
--- a/wqflask/wqflask/templates/base.html
+++ b/wqflask/wqflask/templates/base.html
@@ -74,6 +74,13 @@
<a href="/">Search</a>
</li>
<li class="">
+ <a href="/collections/list">Collections
+ {% if g.user_session.user_ob %}
+ <span class="badge badge-info">{{ g.user_session.user_ob.display_num_collections() }}</span>
+ {% endif %}
+ </a>
+ </li>
+ <li class="">
<a href="/help">Help</a>
</li>
<li class="">
@@ -92,14 +99,6 @@
<a href="/environments">Environments</a>
</li>
<li class="">
- <a href="/collections/list">Collections
- {% if g.user_session.user_ob %}
- <span class="badge badge-info">{{ g.user_session.user_ob.display_num_collections() }}</span>
- {% endif %}
- </a>
- </li>
-
- <li class="">
{% if g.user_session.logged_in %}
<a id="login_out" title="Signed in as {{ g.user_session.user_ob.name_and_org }}." href="/n/logout">Sign out</a>
{% else %}
diff --git a/wqflask/wqflask/templates/testhtmleditor.html b/wqflask/wqflask/templates/docedit.html
index 1d258d0e..1a9e8ca8 100755
--- a/wqflask/wqflask/templates/testhtmleditor.html
+++ b/wqflask/wqflask/templates/docedit.html
@@ -1,18 +1,18 @@
{% extends "base.html" %}
-{% block title %}Test html editor{% endblock %}
+{% block title %}Edit: {{title}}{% endblock %}
{% block content %}
<div class="container">
- <h2>Test HTML Editor</h2>
+ <h3>Edit: {{title}}</h3>
<form>
<textarea name="ckcontent" id="ckcontent">
- Test HTML
+ {{content|safe}}
</textarea>
<script type="text/javascript" src="/static/packages/ckeditor/ckeditor.js"></script>
<script type="text/javascript">
CKEDITOR.replace('ckcontent', {
- height: '500px',
+ height: '650px',
});
</script>
</form>
diff --git a/wqflask/wqflask/templates/docs.html b/wqflask/wqflask/templates/docs.html
index cbaf1e70..08f95721 100755
--- a/wqflask/wqflask/templates/docs.html
+++ b/wqflask/wqflask/templates/docs.html
@@ -5,6 +5,11 @@
{% block content %}
<div class="container">
<h3>{{title}}</h3>
+ <div style="text-align: right;">
+ <a href="docedit?entry={{entry}}">
+ <img style="width: 25px;" src="/static/images/edit.png">
+ </a>
+ </div>
{{content|safe}}
</div>
{% endblock %}
diff --git a/wqflask/wqflask/templates/index_page.html b/wqflask/wqflask/templates/index_page.html
index 538a6799..5e0a92e3 100755
--- a/wqflask/wqflask/templates/index_page.html
+++ b/wqflask/wqflask/templates/index_page.html
@@ -29,19 +29,19 @@
<div class="form-group">
<label for="species" class="col-xs-1 control-label" style="width: 65px !important;">Species:</label>
- <div class="col-xs-10 controls">
+ <div class="col-xs-10 controls input-append" style="padding-right: 0px;">
<div class="col-xs-8">
<select name="species" id="species" class="form-control selectpicker span3" style="width: 280px !important;"></select>
</div>
<div class="col-xs-4">
- <input id="make_default" class="btn btn-default form-control" value="Make Default">
+ <input id="make_default" class="btn btn-primary form-control" value="Make Default">
</div>
</div>
</div>
<div class="form-group">
<label for="group" class="col-xs-1 control-label" style="width: 65px !important;">Group:</label>
- <div class="col-xs-4 controls input-append">
+ <div class="col-xs-10 controls input-append">
<div class="col-xs-8">
<select name="group" id="group" class="form-control selectpicker span3" style="width: 280px !important;"></select>
<i class="icon-question-sign"></i>
@@ -51,7 +51,7 @@
<div class="form-group">
<label for="tissue" class="col-xs-1 control-label" style="width: 65px !important;">Type:</label>
- <div class="col-xs-4 controls">
+ <div class="col-xs-10 controls">
<div class="col-xs-8">
<select name="type" id="type" class="form-control selectpicker span3" style="width: 280px !important;"></select>
</div>
@@ -60,7 +60,7 @@
<div class="form-group">
<label for="dataset" class="col-xs-1 control-label" style="width: 65px !important;">Dataset:</label>
- <div class="col-xs-4 controls input-append">
+ <div class="col-xs-10 controls input-append">
<div class="col-xs-8">
<select name="dataset" id="dataset" class="form-control selectpicker span5" style="width: 450px !important;"></select>
<i class="icon-question-sign"></i>
@@ -86,15 +86,15 @@
<!-- GET ANY HELP -->
<div class="form-group">
- <label for="tfor" class="col-xs-1 control-label" style="width: 65px !important;"></label>
+ <label for="btsearch" class="col-xs-1 control-label" style="width: 65px !important;"></label>
<div class="col-xs-10 controls">
- <div class="col-xs-10">
- <p>Enter terms, genes, ID numbers in the
- <b>Search</b> field<br>
- Use <b>*</b> or <b>?</b> wildcards (Cyp*a?,
- synap*)<br>
- Use <b>quotes</b> for terms such as <i>"tyrosine
- kinase"</i></p>
+ <div class="col-xs-2 controls" style="width: 100px !important;">
+ <input id="btsearch" type="submit" class="btn btn-primary form-control" value="Search">
+ </div>
+ <div class="col-xs-9 controls">
+ Enter terms, genes, ID numbers in the <b>Search</b> field
+ Use <b>*</b> or <b>?</b> wildcards (Cyp*a?, synap*)
+ Use <b>quotes</b> for terms such as <i>"tyrosine kinase"</i>
</div>
</div>
</div>
@@ -103,10 +103,6 @@
<!-- SEARCH, MAKE DEFAULT -->
<div class="form-group">
-
- <div class="col-xs-3 controls" style="width: 100px !important;">
- <input id="btsearch" type="submit" class="btn btn-primary form-control" value="Search">
- </div>
</div>
<input type="hidden" name="FormID" value="searchResult" class="form-control">
@@ -159,7 +155,7 @@
</ul>
</section>
</div>
- <div style="padding-left:120px" class="col-xs-6" style="width: 600px !important;">
+ <div style="padding-left:120px" class="col-xs-4" style="width: 600px !important;">
<!--
<section id="tour-info">
<div class="page-header">
@@ -207,32 +203,15 @@
<li>GeneNetwork Source Code at <a href="https://github.com/genenetwork/genenetwork" target="_blank">GitHub</a></li>
</ul>
- <h3>Mirror and development sites</h3>
- <ul>
- <li><a href="http://www.genenetwork.org/" target="_blank">
- Main GN site</a> at UTHSC</li>
-
- <li><a href="http://www.genenetwork.waimr.uwa.edu.au/" target="_blank">
- Australia</a> at the UWA</li>
+ <h3>GN1 Mirror and development sites</h3>
- <li><a href="http://gn.genetics.ucla.edu/" target="_blank">
- California</a> at UCLA</li>
-
- <li><a href="http://genenetwork.helmholtz-hzi.de/" target="_blank">
- Germany</a> at the HZI</li>
-
- <li><a href="https://genenetwork.hubrecht.eu/" target="_blank">
- Netherlands</a> at the Hubrecht
- (development)</li>
-
- <li><a href="http://genenetwork.memphis.edu/" target="_blank">
- Memphis</a> at the U of M</li>
-
- <li><a href="http://webqtl.bic.nus.edu.sg/" target="_blank">
- Singapore</a> at the NUS</li>
-
- <li><a href="http://genenetwork.epfl.ch/" target="_blank">
- Switzerland</a> at the EPFL</li>
+ <ul>
+ <li><a href="http://www.genenetwork.org/" target="_blank" style="font-size:12px;font-family:verdana;color:blue">Main GN1 site at UTHSC</a> (main site)</li>
+ <li><a href="http://www.genenetwork.waimr.uwa.edu.au/" target="_blank" style="font-size:12px;font-family:verdana;color:blue">Australia at the UWA</a></li>
+ <li><a href="http://gn.genetics.ucla.edu/" target="_blank" style="font-size:12px;font-family:verdana;color:blue">California at UCLA</a></li>
+ <li><a href="http://genenetwork.helmholtz-hzi.de/" target="_blank" style="font-size:12px;font-family:verdana;color:blue">Germany at the HZI</a></li>
+ <li><a href="http://genenetwork.memphis.edu/" target="_blank" style="font-size:12px;font-family:verdana;color:blue">Memphis at the U of M</a></li>
+ <li><a href="http://genenetwork.epfl.ch/" target="_blank" style="font-size:12px;font-family:verdana;color:blue">Switzerland at the EPFL</a></li>
</ul>
</section>
diff --git a/wqflask/wqflask/templates/news.html b/wqflask/wqflask/templates/news.html
new file mode 100755
index 00000000..4f0032b8
--- /dev/null
+++ b/wqflask/wqflask/templates/news.html
@@ -0,0 +1,21 @@
+{% extends "base.html" %}
+
+{% block title %}{{title}}{% endblock %}
+
+{% block content %}
+<div class="container">
+ <h3>{{title}}</h3>
+ <table class="table table-hover table-striped" style="width: 600px;">
+ <tbody>
+ {% for newsitem in newslist %}
+ <tr>
+ <td style="width: 90px; text-wrap:none;" nowrap>
+ <span style="font-weight: bold;">{{newsitem.date}}</span>
+ </td>
+ <td>{{newsitem.details|safe}}</td>
+ </tr>
+ {% endfor %}
+ </tbody>
+ </table>
+</div>
+{% endblock %}
diff --git a/wqflask/wqflask/views.py b/wqflask/wqflask/views.py
index 7fec0456..39004f07 100755
--- a/wqflask/wqflask/views.py
+++ b/wqflask/wqflask/views.py
@@ -33,6 +33,7 @@ from flask import (render_template, request, make_response, Response,
from wqflask import search_results
from wqflask import docs
+from wqflask import news
from base.data_set import DataSet # Used by YAML in marker_regression
from base.data_set import create_datasets_list
from wqflask.show_trait import show_trait
@@ -45,8 +46,6 @@ from wqflask.correlation_matrix import show_corr_matrix
from wqflask.correlation import corr_scatter_plot
from utility import temp_data
-from wqflask.dataSharing import SharingInfo, SharingInfoPage
-
from base import webqtlFormData
from utility.benchmark import Bench
@@ -100,20 +99,20 @@ def tmp_page(img_path):
img_base64 = bytesarray )
-@app.route("/data_sharing")
-def data_sharing_page():
- print("In data_sharing")
- fd = webqtlFormData.webqtlFormData(request.args)
- print("1Have fd")
- sharingInfoObject = SharingInfo.SharingInfo(request.args['GN_AccessionId'], None)
- info, htmlfilelist = sharingInfoObject.getBody(infoupdate="")
- print("type(htmlfilelist):", type(htmlfilelist))
- htmlfilelist = htmlfilelist.encode("utf-8")
- #template_vars = SharingInfo.SharingInfo(request.args['GN_AccessionId'], None)
- print("1 Made it to rendering")
- return render_template("data_sharing.html",
- info=info,
- htmlfilelist=htmlfilelist)
+#@app.route("/data_sharing")
+#def data_sharing_page():
+# print("In data_sharing")
+# fd = webqtlFormData.webqtlFormData(request.args)
+# print("1Have fd")
+# sharingInfoObject = SharingInfo.SharingInfo(request.args['GN_AccessionId'], None)
+# info, htmlfilelist = sharingInfoObject.getBody(infoupdate="")
+# print("type(htmlfilelist):", type(htmlfilelist))
+# htmlfilelist = htmlfilelist.encode("utf-8")
+# #template_vars = SharingInfo.SharingInfo(request.args['GN_AccessionId'], None)
+# print("1 Made it to rendering")
+# return render_template("data_sharing.html",
+# info=info,
+# htmlfilelist=htmlfilelist)
@app.route("/search", methods=('GET',))
@@ -152,9 +151,10 @@ def search_page():
else:
return render_template("search_result_page.html", **result)
-@app.route("/testhtmleditor")
-def testhtmleditor_page():
- return render_template("testhtmleditor.html")
+@app.route("/docedit")
+def docedit():
+ doc = docs.Docs(request.args['entry'])
+ return render_template("docedit.html", **doc.__dict__)
@app.route("/help")
def help():
@@ -162,15 +162,9 @@ def help():
return render_template("docs.html", **doc.__dict__)
@app.route("/news")
-def news():
- #variables = whats_new.whats_new()
- with open("/home/sam/gene/wqflask/wqflask/yaml_data/whats_new.yaml") as fh:
- contents = fh.read()
- yamilized = yaml.safe_load(contents)
- news_items = yamilized['news']
- for news_item in news_items:
- print("\nnews_item is: %s\n" % (news_item))
- return render_template("whats_new.html", news_items=news_items)
+def news_route():
+ newsobject = news.News()
+ return render_template("news.html", **newsobject.__dict__)
@app.route("/references")
def references():
diff --git a/wqflask/wqflask/yaml_data/whats_new.yaml b/wqflask/wqflask/yaml_data/whats_new.yaml
deleted file mode 100755
index 8f41a8f2..00000000
--- a/wqflask/wqflask/yaml_data/whats_new.yaml
+++ /dev/null
@@ -1,26 +0,0 @@
-news:
--
- date: 2012-1-20
- title: Mouse SNPs from dbSNP have been added to GeneNetwork
- details:
- 10 million mouse SNPs from dbSNP (build 128) have been added to Variant Browser.
- They could be searched by name (e.g. rs31192936) (Implemented by Xiaodong Zhou and Ning Liu).
-
--
- date: 2012-1-20
- title: Literature correlation has been update to 2011 version
- details:
- Dr. Ramin Homayouni and Dr. Lijing Xu kindly provide the 2011 version of mouse gene-gene
- literature correlation matrix to GeneNetwork. (Implemented by Xiaodong Zhou).
-
--
- date: 2012-1-16
- title: Expression data set for EPFL/LISP BXD Muscle Affy Mouse Gene 1.0 ST (Dec11) RMA ** has been entered in GeneNetwork
- details:
- Laboratory of Integrative and Systems Physiology
- (<a href="http://auwerx-lab.epfl.ch/">LISP</a>).
- This data set is not yet freely available for global analysis.
- This data set has not yet been used or described in any publication.
- Please contact Johan Auwerx or Evan Williams at evan.williams@epfl.ch
- regarding use of these data. (Implemented by J Auwerx, E Williams, LA Rose,
- RW Williams and A Centeno). \ No newline at end of file