aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore5
-rwxr-xr-xwqflask/wqflask/gsearch.py83
-rwxr-xr-xwqflask/wqflask/templates/gsearch.html63
-rwxr-xr-xwqflask/wqflask/templates/gsearch2.html55
-rwxr-xr-xwqflask/wqflask/templates/gsearchact.html137
-rwxr-xr-xwqflask/wqflask/templates/gsearchact2.html114
-rwxr-xr-xwqflask/wqflask/views.py21
7 files changed, 475 insertions, 3 deletions
diff --git a/.gitignore b/.gitignore
index 1108f228..1ab1e727 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,9 +2,8 @@
*.pyc
*.orig
*.bak
+*.cross
*~
web/new_genotypes/HSNIH.json
-*.cross
-*webqtlConfig.py
wqflask/secure_server.py
-
+wqflask/base/webqtlConfig.py
diff --git a/wqflask/wqflask/gsearch.py b/wqflask/wqflask/gsearch.py
new file mode 100755
index 00000000..706a3655
--- /dev/null
+++ b/wqflask/wqflask/gsearch.py
@@ -0,0 +1,83 @@
+from __future__ import absolute_import, print_function, division
+
+from flask import Flask, g
+
+class GSearch(object):
+
+ # http://gn2_lei.genenetwork.org/gsearch?species=mouse&group=BXD&search_terms=shh
+ def __init__(self, kw):
+ if 'species' in kw and 'group' in kw:
+ self.species = kw['species']
+ self.group = kw['group']
+ self.terms = kw['terms']
+ sql = """
+ SELECT InbredSet.`Id`
+ FROM InbredSet,Species
+ WHERE InbredSet.`Name` LIKE "%s"
+ AND InbredSet.`SpeciesId`=Species.`Id`
+ AND Species.`Name` LIKE "%s"
+ """ % (self.group, self.species)
+ dbre = g.db.execute(sql).fetchone()
+ self.inbredset_id = dbre[0]
+ sql = """
+ SELECT DISTINCT 0,
+ Tissue.`Name` AS tissue_name,
+ ProbeSetFreeze.FullName AS probesetfreeze_fullname,
+ ProbeSet.Name AS probeset_name,
+ ProbeSet.Symbol AS probeset_symbol,
+ ProbeSet.`description` AS probeset_description,
+ ProbeSet.Chr AS chr,
+ ProbeSet.Mb AS mb,
+ ProbeSetXRef.Mean AS mean,
+ ProbeSetXRef.LRS AS lrs,
+ ProbeSetXRef.`Locus` AS locus,
+ ProbeSetXRef.`pValue` AS pvalue,
+ ProbeSetXRef.`additive` AS additive
+ FROM InbredSet, ProbeSetXRef, ProbeSet, ProbeFreeze, ProbeSetFreeze, Tissue
+ WHERE ProbeFreeze.InbredSetId=%s
+ AND ProbeFreeze.`TissueId`=Tissue.`Id`
+ AND ProbeSetFreeze.ProbeFreezeId=ProbeFreeze.Id
+ AND ( MATCH (ProbeSet.Name,ProbeSet.description,ProbeSet.symbol,alias,GenbankId, UniGeneId, Probe_Target_Description) AGAINST ('%s' IN BOOLEAN MODE) )
+ AND ProbeSet.Id = ProbeSetXRef.ProbeSetId
+ AND ProbeSetXRef.ProbeSetFreezeId=ProbeSetFreeze.Id
+ ORDER BY tissue_name, probesetfreeze_fullname, probeset_name
+ LIMIT 1000
+ """ % (self.inbredset_id, self.terms)
+ self.results = g.db.execute(sql).fetchall()
+ elif 'species' in kw:
+ self.species = kw['species']
+ self.terms = kw['terms']
+ sql = """
+ SELECT Species.`Id`
+ FROM Species
+ WHERE Species.`Name` LIKE "%s"
+ """ % (self.species)
+ dbre = g.db.execute(sql).fetchone()
+ self.species_id = dbre[0]
+ sql = """
+ SELECT DISTINCT 0,
+ InbredSet.`Name` AS inbredset_name,
+ Tissue.`Name` AS tissue_name,
+ ProbeSetFreeze.FullName AS probesetfreeze_fullname,
+ ProbeSet.Name AS probeset_name,
+ ProbeSet.Symbol AS probeset_symbol,
+ ProbeSet.`description` AS probeset_description,
+ ProbeSet.Chr AS chr,
+ ProbeSet.Mb AS mb,
+ ProbeSetXRef.Mean AS mean,
+ ProbeSetXRef.LRS AS lrs,
+ ProbeSetXRef.`Locus` AS locus,
+ ProbeSetXRef.`pValue` AS pvalue,
+ ProbeSetXRef.`additive` AS additive
+ FROM InbredSet, ProbeSetXRef, ProbeSet, ProbeFreeze, ProbeSetFreeze, Tissue
+ WHERE InbredSet.`SpeciesId`=%s
+ AND ProbeFreeze.InbredSetId=InbredSet.`Id`
+ AND ProbeFreeze.`TissueId`=Tissue.`Id`
+ AND ProbeSetFreeze.ProbeFreezeId=ProbeFreeze.Id
+ AND ( MATCH (ProbeSet.Name,ProbeSet.description,ProbeSet.symbol,alias,GenbankId, UniGeneId, Probe_Target_Description) AGAINST ('%s' IN BOOLEAN MODE) )
+ AND ProbeSet.Id = ProbeSetXRef.ProbeSetId
+ AND ProbeSetXRef.ProbeSetFreezeId=ProbeSetFreeze.Id
+ ORDER BY inbredset_name, tissue_name, probesetfreeze_fullname, probeset_name
+ LIMIT 1000
+ """ % (self.species_id, self.terms)
+ self.results = g.db.execute(sql).fetchall()
diff --git a/wqflask/wqflask/templates/gsearch.html b/wqflask/wqflask/templates/gsearch.html
new file mode 100755
index 00000000..28301515
--- /dev/null
+++ b/wqflask/wqflask/templates/gsearch.html
@@ -0,0 +1,63 @@
+{% extends "base.html" %}
+{% block title %}GeneNetwork{% endblock %}
+{% block content %}
+<!-- Start of body -->
+
+ <div class="container-fluid">
+
+ {{ flash_me() }}
+
+ <div class="row" style="width: 1200px !important;">
+
+ <div class="col-xs-5 col-xs-5">
+ <section id="search">
+ <div class="page-header">
+ <h1>Global Search</h1>
+ </div>
+ <form method="get" action="/gsearchact" name="SEARCHFORM">
+ <fieldset>
+ <div style="padding: 20px" class="form-horizontal">
+
+ <div class="form-group">
+ <label for="species" class="col-xs-1 control-label" style="width: 65px !important;">Species:</label>
+ <div class="col-xs-4 controls">
+ <select name="species" id="species" class="form-control selectpicker span3" style="width: 300px !important;"></select>
+ </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">
+ <select name="group" id="group" class="form-control selectpicker span3" style="width: 300px !important;"></select>
+ <i class="icon-question-sign"></i>
+ </div>
+ </div>
+
+ <div class="form-group">
+ <label for="tfor" class="col-xs-1 control-label" style="width: 65px !important;">Search:</label>
+ <div class="col-xs-10 controls">
+ <textarea name="terms" rows="2" class="form-control search-query" style="width: 450px !important;" id="tfor"></textarea>
+ </div>
+ </div>
+
+ <!-- SEARCH, MAKE DEFAULT, ADVANCED SEARCH -->
+
+ <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>
+ </div>
+ </fieldset>
+ </form>
+ </section>
+ </div>
+ </div>
+ </div>
+
+{%endblock%}
+
+{% block js %}
+ <script src="/static/new/javascript/dataset_select_menu.js"></script>
+{% endblock %} \ No newline at end of file
diff --git a/wqflask/wqflask/templates/gsearch2.html b/wqflask/wqflask/templates/gsearch2.html
new file mode 100755
index 00000000..430bf889
--- /dev/null
+++ b/wqflask/wqflask/templates/gsearch2.html
@@ -0,0 +1,55 @@
+{% extends "base.html" %}
+{% block title %}GeneNetwork{% endblock %}
+{% block content %}
+<!-- Start of body -->
+
+ <div class="container-fluid">
+
+ {{ flash_me() }}
+
+ <div class="row" style="width: 1200px !important;">
+
+ <div class="col-xs-5 col-xs-5">
+ <section id="search">
+ <div class="page-header">
+ <h1>Global Search</h1>
+ </div>
+ <form method="get" action="/gsearchact2" name="SEARCHFORM">
+ <fieldset>
+ <div style="padding: 20px" class="form-horizontal">
+
+ <div class="form-group">
+ <label for="species" class="col-xs-1 control-label" style="width: 65px !important;">Species:</label>
+ <div class="col-xs-4 controls">
+ <select name="species" id="species" class="form-control selectpicker span3" style="width: 300px !important;"></select>
+ </div>
+ </div>
+
+ <div class="form-group">
+ <label for="tfor" class="col-xs-1 control-label" style="width: 65px !important;">Search:</label>
+ <div class="col-xs-10 controls">
+ <textarea name="terms" rows="2" class="form-control search-query" style="width: 450px !important;" id="tfor"></textarea>
+ </div>
+ </div>
+
+ <!-- SEARCH, MAKE DEFAULT, ADVANCED SEARCH -->
+
+ <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>
+ </div>
+ </fieldset>
+ </form>
+ </section>
+ </div>
+ </div>
+ </div>
+
+{%endblock%}
+
+{% block js %}
+ <script src="/static/new/javascript/dataset_select_menu.js"></script>
+{% endblock %} \ No newline at end of file
diff --git a/wqflask/wqflask/templates/gsearchact.html b/wqflask/wqflask/templates/gsearchact.html
new file mode 100755
index 00000000..295ad2fd
--- /dev/null
+++ b/wqflask/wqflask/templates/gsearchact.html
@@ -0,0 +1,137 @@
+{% extends "base.html" %}
+{% block title %}Search Results{% endblock %}
+{% block css %}
+ <link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/css/jquery.dataTables.css" />
+ <link rel="stylesheet" type="text/css" href="/static/packages/DT_bootstrap/DT_bootstrap.css" />
+ <link rel="stylesheet" type="text/css" href="/static/packages/TableTools/media/css/TableTools.css" />
+{% endblock %}
+{% block content %}
+<!-- Start of body -->
+
+ <div class="container">
+
+ <p>To study a record, click on its ID below.<br />Check records below and click Add button to add to selection.</p>
+
+ <div>
+ <br />
+ <button class="btn btn-default" id="select_all"><span class="glyphicon glyphicon-ok"></span> Select All</button>
+ <button class="btn btn-default" id="deselect_all"><span class="glyphicon glyphicon-remove"></span> Deselect All</button>
+ <button class="btn btn-default" id="invert"><span class="glyphicon glyphicon-resize-vertical"></span> Invert</button>
+ <button class="btn btn-default" id="add"><span class="glyphicon glyphicon-plus-sign"></span> Add</button>
+ <button class="btn btn-primary pull-right"><span class="glyphicon glyphicon-download"></span> Download Table</button>
+ <br />
+ <br />
+ <table class="table table-hover table-striped" id="trait_table">
+ <thead>
+ <tr>
+ <th></th>
+ <th>Index</th>
+ <th>Tissue</th>
+ <th>Dataset</th>
+ <th>Record</th>
+ <th>Symbol</th>
+ <th>Description</th>
+ <th>Chr</th>
+ <th>Mb</th>
+ <th>Mean</th>
+ <th>Max LRS</th>
+ <th>Locus</th>
+ <th>Pvalue</th>
+ <th>Additive</th>
+ </tr>
+ </thead>
+
+ <tbody>
+ {% for this_trait in results %}
+ <TR>
+ <td><input type="checkbox"></td>
+ <td>{{ loop.index }}</td>
+ {% for item in this_trait[1:] %}
+ <TD>{{ item }}</TD>
+ {% endfor %}
+ </TR>
+ {% endfor %}
+ </tbody>
+
+ </table>
+ </div>
+ </div>
+
+<!-- End of body -->
+
+{% endblock %}
+
+{% block js %}
+ <script type="text/javascript" src="/static/new/javascript/search_results.js"></script>
+
+ <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/jquery.dataTables.min.js"></script>
+ <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/dataTables.naturalSort.js"></script>
+ <script language="javascript" type="text/javascript" src="/static/packages/DT_bootstrap/DT_bootstrap.js"></script>
+ <script language="javascript" type="text/javascript" src="/static/packages/TableTools/media/js/TableTools.min.js"></script>
+ <script type="text/javascript" charset="utf-8">
+ function getValue(x) {
+ if (x.indexOf('input') >= 0) {
+ if ($(x).val() == 'x') {
+ return 0
+ }
+ else {
+ return parseFloat($(x).val());
+ }
+ }
+ return parseFloat(x);
+ }
+
+ jQuery.fn.dataTableExt.oSort['cust-txt-asc'] = function (a, b) {
+ var x = getValue(a);
+ var y = getValue(b);
+ return ((x < y) ? -1 : ((x > y) ? 1 : 0));
+ };
+
+ jQuery.fn.dataTableExt.oSort['cust-txt-desc'] = function (a, b) {
+ var x = getValue(a);
+ var y = getValue(b);
+ return ((x < y) ? 1 : ((x > y) ? -1 : 0));
+ };
+
+
+ $(document).ready( function () {
+
+ $('#trait_table tr').click(function(event) {
+ if (event.target.type !== 'checkbox') {
+ $(':checkbox', this).trigger('click');
+ }
+ });
+
+ console.time("Creating table");
+ $('#trait_table').dataTable( {
+ "aoColumns": [
+ { "bSortable": false },
+ { "bSortable": true },
+ { "sType": "natural" },
+ { "sType": "natural" },
+ { "sType": "natural", "sWidth": "35%" },
+ { "sType": "natural", "sWidth": "15%" },
+ { "sType": "cust-txt" },
+ { "sType": "natural", "sWidth": "12%" },
+ { "sType": "natural", "sWidth": "12%" },
+ { "sType": "natural", "sWidth": "12%" },
+ { "sType": "natural", "sWidth": "12%" },
+ { "sType": "natural", "sWidth": "12%" },
+ { "sType": "natural", "sWidth": "15%" },
+ { "sType": "cust-txt" }
+ ],
+
+ "sDom": "tir",
+ "iDisplayLength": -1,
+ "autoWidth": true,
+ "bLengthChange": true,
+ "bDeferRender": true,
+ "bSortClasses": false
+ } );
+
+ console.timeEnd("Creating table");
+ });
+
+ </script>
+
+{% endblock %}
diff --git a/wqflask/wqflask/templates/gsearchact2.html b/wqflask/wqflask/templates/gsearchact2.html
new file mode 100755
index 00000000..d99bfadc
--- /dev/null
+++ b/wqflask/wqflask/templates/gsearchact2.html
@@ -0,0 +1,114 @@
+{% extends "base.html" %}
+{% block title %}Search Results{% endblock %}
+{% block css %}
+ <link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/css/jquery.dataTables.css" />
+ <link rel="stylesheet" type="text/css" href="/static/packages/DT_bootstrap/DT_bootstrap.css" />
+ <link rel="stylesheet" type="text/css" href="/static/packages/TableTools/media/css/TableTools.css" />
+{% endblock %}
+{% block content %}
+<!-- Start of body -->
+
+ <div class="container">
+
+ <p>To study a record, click on its ID below.<br />Check records below and click Add button to add to selection.</p>
+
+ <div>
+ <br />
+ <button class="btn btn-default" id="select_all"><span class="glyphicon glyphicon-ok"></span> Select All</button>
+ <button class="btn btn-default" id="deselect_all"><span class="glyphicon glyphicon-remove"></span> Deselect All</button>
+ <button class="btn btn-default" id="invert"><span class="glyphicon glyphicon-resize-vertical"></span> Invert</button>
+ <button class="btn btn-default" id="add"><span class="glyphicon glyphicon-plus-sign"></span> Add</button>
+ <button class="btn btn-primary pull-right"><span class="glyphicon glyphicon-download"></span> Download Table</button>
+ <br />
+ <br />
+ <table class="table table-hover table-striped" id='' style="width: 100%;">
+ <thead>
+ <tr>
+ <th>Group</th>
+ <th>Tissue</th>
+ <th>Dataset</th>
+ <th>Record</th>
+ <th>Symbol</th>
+ <th>Description</th>
+ <th>Chr</th>
+ <th>Mb</th>
+ <th>Mean</th>
+ <th>Max LRS</th>
+ <th>Locus</th>
+ <th>Pvalue</th>
+ <th>Additive</th>
+ </tr>
+ </thead>
+
+ <tbody>
+ {% for this_trait in results %}
+ <TR>
+ {% for item in this_trait[1:] %}
+ <TD>{{ item }}</TD>
+ {% endfor %}
+ </TR>
+ {% endfor %}
+ </tbody>
+
+ </table>
+ </div>
+ </div>
+
+<!-- End of body -->
+
+{% endblock %}
+
+{% block js %}
+ <script type="text/javascript" src="/static/new/javascript/search_results.js"></script>
+
+ <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/jquery.dataTables.min.js"></script>
+ <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/dataTables.naturalSort.js"></script>
+ <script language="javascript" type="text/javascript" src="/static/packages/DT_bootstrap/DT_bootstrap.js"></script>
+ <script language="javascript" type="text/javascript" src="/static/packages/TableTools/media/js/TableTools.min.js"></script>
+ <script type="text/javascript" charset="utf-8">
+ function getValue(x) {
+ if (x.indexOf('input') >= 0) {
+ if ($(x).val() == 'x') {
+ return 0
+ }
+ else {
+ return parseFloat($(x).val());
+ }
+ }
+ return parseFloat(x);
+ }
+
+ jQuery.fn.dataTableExt.oSort['cust-txt-asc'] = function (a, b) {
+ var x = getValue(a);
+ var y = getValue(b);
+ return ((x < y) ? -1 : ((x > y) ? 1 : 0));
+ };
+
+ jQuery.fn.dataTableExt.oSort['cust-txt-desc'] = function (a, b) {
+ var x = getValue(a);
+ var y = getValue(b);
+ return ((x < y) ? 1 : ((x > y) ? -1 : 0));
+ };
+
+
+ $(document).ready( function () {
+
+ /*num_columns = $('#trait_table').find('tr:first th').length;
+
+ nul_cols = []
+ for (i=0; i<num_columns - 1, i++) {
+ $('#trait_table > tbody > tr').each(function() {
+ if ($(this).find('td:eq(i)').html()){
+ continue;
+ }
+ });
+ nul_cols.push(i)
+ }*/
+
+ console.time("Creating table");
+ console.timeEnd("Creating table");
+ });
+
+ </script>
+
+{% endblock %}
diff --git a/wqflask/wqflask/views.py b/wqflask/wqflask/views.py
index 09bf2270..e00c3e80 100755
--- a/wqflask/wqflask/views.py
+++ b/wqflask/wqflask/views.py
@@ -33,6 +33,7 @@ from flask import (render_template, request, make_response, Response,
Flask, g, config, jsonify, redirect, url_for)
from wqflask import search_results
+from wqflask import gsearch
from wqflask import docs
from wqflask import news
from base.data_set import DataSet # Used by YAML in marker_regression
@@ -154,6 +155,26 @@ def search_page():
else:
return render_template("search_error.html")
+@app.route("/gsearch", methods=('GET',))
+def gsearchreq():
+ return render_template("gsearch.html")
+
+@app.route("/gsearchact", methods=('GET',))
+def gsearchact():
+ print("request.args is", request.args)
+ result = gsearch.GSearch(request.args).__dict__
+ return render_template("gsearchact.html", **result)
+
+@app.route("/gsearch2", methods=('GET',))
+def gsearchreq2():
+ return render_template("gsearch2.html")
+
+@app.route("/gsearchact2", methods=('GET',))
+def gsearchact2():
+ print("request.args is", request.args)
+ result = gsearch.GSearch(request.args).__dict__
+ return render_template("gsearchact2.html", **result)
+
@app.route("/docedit")
def docedit():
doc = docs.Docs(request.args['entry'])