aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xwqflask/wqflask/gsearch.py31
-rwxr-xr-xwqflask/wqflask/templates/gsearch0.html48
-rwxr-xr-xwqflask/wqflask/templates/gsearch1.html (renamed from wqflask/wqflask/templates/gsearch.html)10
-rwxr-xr-xwqflask/wqflask/templates/gsearch2.html8
-rwxr-xr-xwqflask/wqflask/templates/gsearchact0.html (renamed from wqflask/wqflask/templates/gsearchact.html)4
-rwxr-xr-xwqflask/wqflask/templates/gsearchact1.html118
-rwxr-xr-xwqflask/wqflask/templates/gsearchact2.html51
-rwxr-xr-xwqflask/wqflask/views.py23
8 files changed, 260 insertions, 33 deletions
diff --git a/wqflask/wqflask/gsearch.py b/wqflask/wqflask/gsearch.py
index 706a3655..4792f77b 100755
--- a/wqflask/wqflask/gsearch.py
+++ b/wqflask/wqflask/gsearch.py
@@ -4,7 +4,6 @@ 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']
@@ -81,3 +80,33 @@ class GSearch(object):
LIMIT 1000
""" % (self.species_id, self.terms)
self.results = g.db.execute(sql).fetchall()
+ else:
+ self.terms = kw['terms']
+ sql = """
+ SELECT
+ Species.`Name` AS species_name,
+ 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 Species, InbredSet, ProbeSetXRef, ProbeSet, ProbeFreeze, ProbeSetFreeze, Tissue
+ WHERE InbredSet.`SpeciesId`=Species.`Id`
+ 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 species_name, inbredset_name, tissue_name, probesetfreeze_fullname, probeset_name
+ LIMIT 1000
+ """ % (self.terms)
+ self.results = g.db.execute(sql).fetchall()
diff --git a/wqflask/wqflask/templates/gsearch0.html b/wqflask/wqflask/templates/gsearch0.html
new file mode 100755
index 00000000..45ab0d3b
--- /dev/null
+++ b/wqflask/wqflask/templates/gsearch0.html
@@ -0,0 +1,48 @@
+{% 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="/gsearchact0" name="SEARCHFORM">
+ <fieldset>
+ <div style="padding: 20px" class="form-horizontal">
+
+ <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/gsearch.html b/wqflask/wqflask/templates/gsearch1.html
index 28301515..500e7f3d 100755
--- a/wqflask/wqflask/templates/gsearch.html
+++ b/wqflask/wqflask/templates/gsearch1.html
@@ -14,7 +14,7 @@
<div class="page-header">
<h1>Global Search</h1>
</div>
- <form method="get" action="/gsearchact" name="SEARCHFORM">
+ <form method="get" action="/gsearchact1" name="SEARCHFORM">
<fieldset>
<div style="padding: 20px" class="form-horizontal">
@@ -26,14 +26,6 @@
</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>
diff --git a/wqflask/wqflask/templates/gsearch2.html b/wqflask/wqflask/templates/gsearch2.html
index 430bf889..9a6da575 100755
--- a/wqflask/wqflask/templates/gsearch2.html
+++ b/wqflask/wqflask/templates/gsearch2.html
@@ -26,6 +26,14 @@
</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>
diff --git a/wqflask/wqflask/templates/gsearchact.html b/wqflask/wqflask/templates/gsearchact0.html
index 295ad2fd..54e156e1 100755
--- a/wqflask/wqflask/templates/gsearchact.html
+++ b/wqflask/wqflask/templates/gsearchact0.html
@@ -26,6 +26,8 @@
<tr>
<th></th>
<th>Index</th>
+ <th>Species</th>
+ <th>Group</th>
<th>Tissue</th>
<th>Dataset</th>
<th>Record</th>
@@ -46,7 +48,7 @@
<TR>
<td><input type="checkbox"></td>
<td>{{ loop.index }}</td>
- {% for item in this_trait[1:] %}
+ {% for item in this_trait %}
<TD>{{ item }}</TD>
{% endfor %}
</TR>
diff --git a/wqflask/wqflask/templates/gsearchact1.html b/wqflask/wqflask/templates/gsearchact1.html
new file mode 100755
index 00000000..dcc82f91
--- /dev/null
+++ b/wqflask/wqflask/templates/gsearchact1.html
@@ -0,0 +1,118 @@
+{% 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></th>
+ <th>Index</th>
+ <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>
+ <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 () {
+
+ /*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/templates/gsearchact2.html b/wqflask/wqflask/templates/gsearchact2.html
index d99bfadc..295ad2fd 100755
--- a/wqflask/wqflask/templates/gsearchact2.html
+++ b/wqflask/wqflask/templates/gsearchact2.html
@@ -21,10 +21,11 @@
<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%;">
+ <table class="table table-hover table-striped" id="trait_table">
<thead>
<tr>
- <th>Group</th>
+ <th></th>
+ <th>Index</th>
<th>Tissue</th>
<th>Dataset</th>
<th>Record</th>
@@ -43,6 +44,8 @@
<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 %}
@@ -65,7 +68,7 @@
<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">
+ <script type="text/javascript" charset="utf-8">
function getValue(x) {
if (x.indexOf('input') >= 0) {
if ($(x).val() == 'x') {
@@ -93,19 +96,39 @@
$(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)
- }*/
+ $('#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");
});
diff --git a/wqflask/wqflask/views.py b/wqflask/wqflask/views.py
index e00c3e80..a1cecc9e 100755
--- a/wqflask/wqflask/views.py
+++ b/wqflask/wqflask/views.py
@@ -155,15 +155,23 @@ def search_page():
else:
return render_template("search_error.html")
-@app.route("/gsearch", methods=('GET',))
-def gsearchreq():
- return render_template("gsearch.html")
+@app.route("/gsearch0", methods=('GET',))
+def gsearchreq0():
+ return render_template("gsearch0.html")
-@app.route("/gsearchact", methods=('GET',))
-def gsearchact():
- print("request.args is", request.args)
+@app.route("/gsearchact0", methods=('GET',))
+def gsearchact0():
result = gsearch.GSearch(request.args).__dict__
- return render_template("gsearchact.html", **result)
+ return render_template("gsearchact0.html", **result)
+
+@app.route("/gsearch1", methods=('GET',))
+def gsearchreq1():
+ return render_template("gsearch1.html")
+
+@app.route("/gsearchact1", methods=('GET',))
+def gsearchact1():
+ result = gsearch.GSearch(request.args).__dict__
+ return render_template("gsearchact1.html", **result)
@app.route("/gsearch2", methods=('GET',))
def gsearchreq2():
@@ -171,7 +179,6 @@ def gsearchreq2():
@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)