about summary refs log tree commit diff
diff options
context:
space:
mode:
authorHao Chen2019-05-12 05:40:39 -0500
committerHao Chen2019-05-12 05:40:39 -0500
commitbc6a6e1d5974cb1c9f8a181728d93dafc531da01 (patch)
treed09256b29d323a95f44d2fa4aec6928522c665ba
parent08503676ea318ade7a72fcd999a32bc6e5433e0c (diff)
downloadgenecup-bc6a6e1d5974cb1c9f8a181728d93dafc531da01.tar.gz
prog bar showing
-rwxr-xr-xs2.py112
-rw-r--r--templates/progress.html29
2 files changed, 141 insertions, 0 deletions
diff --git a/s2.py b/s2.py
new file mode 100755
index 0000000..7e2848b
--- /dev/null
+++ b/s2.py
@@ -0,0 +1,112 @@
+#!/bin/env  python3
+from flask import Flask, render_template, request, session, Response
+import tempfile
+import random
+import string
+from ratspub import *
+import time
+
+app=Flask(__name__)
+app.config['SECRET_KEY'] = '#DtfrL98G5t1dC*4'
+
+@app.route("/")
+def root():
+    return render_template('index.html')
+
+@app.route('/progress')
+def progress():
+    # only 1-6 terms are allowed
+    genes=request.args.get('query')
+    genes=genes.replace(",", " ")
+    genes=genes.replace(";", " ")
+    genes=genes.split()
+    if len(genes)>=6:
+        message="<span class='text-danger'>Up to five terms can be searched at a time</span>"
+        return render_template('index.html', message=message)
+    elif len(genes)==0:
+        message="<span class='text-danger'>Please enter a search term </span>"
+        return render_template('index.html', message=message)
+    # put the query in session cookie
+    session['query']=genes
+    # generate a unique session ID to track the results 
+    tf_path=tempfile.gettempdir()
+    session['path']=tf_path+"/tmp" + ''.join(random.choice(string.ascii_letters) for x in range(6))
+    return render_template('progress.html')
+
+@app.route("/search")
+def search():
+#    tf_path=tempfile.gettempdir()
+#    tf_name=tf_path+"/tmp"+''.join(random.choice(string.ascii_letters) for x in range(6))
+    genes=session['query']
+    percent=round(100/(len(genes)*3), 2)
+    print ("percent percent --->"+str(percent))
+    cysdata=open(session['path']+"_cy","w+")
+    sntdata=open(session['path']+"_snt","w+")
+    def generate(genes):
+        sentences=str()
+        edges=str()
+        nodes=default_nodes
+        nodes=str()
+        progress=0
+        #ft_name=session['path']
+        ft_name="path"
+        for  gene in genes:
+            nodes+="{ data: { id: '" + gene +  "', nodecolor:'#FADBD8', fontweight:700, url:'https://www.ncbi.nlm.nih.gov/gene/?term="+gene+"'} },\n"
+            print ("xxxxxxxxxxxxxxxxxxxxxx")
+            print (genes)
+            sent0=gene_addiction(gene)
+            progress+=percent
+            print ("yyyyyyyyyyyyyx")
+            print(progress)
+            yield "data:"+str(progress)+"\n\n"
+            e0=generate_edges(sent0, "tf_name")
+            sent1=gene_functional(gene)
+            progress+=percent
+            yield "data:"+str(progress)+"\n\n"
+            e1=generate_edges(sent1, "tf_name")
+            sent2=gene_anatomical(gene)
+            progress+=percent
+            e2=generate_edges(sent2, "tf_name")
+            edges+=e0+e1+e2
+            sentences+=sent0+sent1+sent2
+            #save data before the last yield
+            if (progress>99):
+                progress=100
+                sntdata.write(sentences)
+                sntdata.close()
+                cysdata.write(nodes)
+                cysdata.close()
+            yield "data:"+str(progress)+"\n\n"
+    return Response(generate(genes), mimetype='text/event-stream')
+
+@app.route('/cytoscape')
+def cytoscape():
+    with open(session['path']+"_cy","r") as f:
+        elements=f.read()
+        return render_template('cytoscape.html', elements=elements)
+
+@app.route("/sentences")
+def sentences():
+    edge=request.args.get('edgeID')
+    (tf_name, gene0, cat0)=edge.split("|")
+    out="<h3>"+gene0 + " and " + cat0  + "</h3><hr>\n"
+    print(tf_name)
+    with open(tf_name, "r") as df:
+        all_sents=df.read()
+    for sent in all_sents.split("\n"):
+        if len(sent.strip())!=0:
+           (gene,nouse,cat, pmid, text)=sent.split("\t")
+           if (gene == gene0 and cat == cat0) :
+               out+= "<li> "+ text + " <a href=\"https://www.ncbi.nlm.nih.gov/pubmed/?term=" + pmid +"\" target=_new>PMID:"+pmid+"<br></a>"
+    return render_template('sentences.html', sentences="<ol>"+out+"</ol><p>")
+
+@app.route("/shownode")
+def shownode():
+    node=request.args.get('node')
+    allnodes={**brain_d, **drug_d, **function_d, **addiction_d}
+    out="<p>"+node.upper()+"<hr><li>"+ allnodes[node].replace("|", "<li>")
+    return render_template('sentences.html', sentences=out+"<p>")
+
+
+if __name__ == '__main__':
+    app.run(debug=True)
diff --git a/templates/progress.html b/templates/progress.html
new file mode 100644
index 0000000..322604d
--- /dev/null
+++ b/templates/progress.html
@@ -0,0 +1,29 @@
+{% extends "layout.html" %}
+{% block content %}
+
+<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
+
+	<script>
+	var source = new EventSource("/search");
+	source.onmessage = function(event) {
+		$('.progress-bar').css('width', event.data+'%').attr('aria-valuenow', event.data);
+		$('.progress-bar-label').text(event.data+'%');
+
+		if(event.data == 100){
+			window.location.replace("/cytoscape")
+			source.close()
+		}
+	}
+	</script>
+
+	<div id="progs" class="progress" style="width: 50%; margin: 50px;">
+		<div class="progress-bar progress-bar-striped active" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%">
+			<span class="progress-bar-label">0%</span>
+		</div>
+	</div>
+	
+ 
+{% endblock %}
+
+
+