From 5abc13ae06b2ce7e53480340a1b9292701dc4ab5 Mon Sep 17 00:00:00 2001 From: Hao Chen Date: Sun, 12 May 2019 06:51:20 -0500 Subject: progress working --- ratspub.py | 8 ++-- s2.py | 112 ------------------------------------------------ server.py | 81 +++++++++++++++++++++++----------- templates/index.html | 8 +++- templates/progress.html | 44 +++++++++++-------- 5 files changed, 95 insertions(+), 158 deletions(-) delete mode 100755 s2.py diff --git a/ratspub.py b/ratspub.py index 70877b6..7916198 100755 --- a/ratspub.py +++ b/ratspub.py @@ -106,7 +106,7 @@ drug_d = {"alcohol":"alcohol|alcoholism|alcoholic", "nicotine":"smoking|nicotine|tobacco", "cocaine":"cocaine", "opioid":"opioid|opioids|fentanyl|oxycodone|oxycontin|heroin|morphine|methadone|buprenorphine|vicodin|hydrocodone|hycodan|kadian|percoset|hydromorphone|naloxone|codeine|suboxone|tramadol|kratom", - "amphetamine":"methamphetamine|amphetamine|METH", + "amphetamine":"methamphetamine|amphetamine|METH|AMPH", "cannabinoid":"endocannabinoid|cannabinoids|endocannabinoids|marijuana|cannabidiol|cannabinoid|tetrahydrocannabinol|thc|thc 9|Oleoylethanolamide|palmitoylethanolamide|acylethanolamides" } drug=undic(drug_d) @@ -121,11 +121,11 @@ brain_d ={"cortex":"cortex|prefrontal|pfc|mPFC|vmpfc|corticostriatal|cortico lim # brain region has too many short acronyms to just use the undic function, so search PubMed using the following brain="cortex|accumbens|striatum|amygadala|hippocampus|tegmental|mesolimbic|infralimbic|prelimbic" -function_d={"neuroplasticity":"neuroplasticity|plasticity|long term potentiation|LTP|long term depression|LTD|synaptic|epsp|epsc|neurite|neurogenesis|boutons|mIPSC|IPSC|IPSP", - "signalling":"signalling|signaling|phosphorylation|glycosylation", -# "regulation":"increased|decreased|regulated|inhibited|stimulated", +function_d={"signalling":"signalling|signaling|phosphorylation|glycosylation", "transcription":"transcription|methylation|hypomethylation|hypermethylation|histone|ribosome", + "neuroplasticity":"neuroplasticity|plasticity|long term potentiation|LTP|long term depression|LTD|synaptic|epsp|epsc|neurite|neurogenesis|boutons|mIPSC|IPSC|IPSP", "neurotransmission": "neurotransmission|neuropeptides|neuropeptide|glutamate|glutamatergic|GABA|GABAergic|dopamine|dopaminergic|DAergic|cholinergic|nicotinic|muscarinic|serotonergic|serotonin|5 ht|acetylcholine", +# "regulation":"increased|decreased|regulated|inhibited|stimulated", } function=undic(function_d) diff --git a/s2.py b/s2.py deleted file mode 100755 index 7e2848b..0000000 --- a/s2.py +++ /dev/null @@ -1,112 +0,0 @@ -#!/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="Up to five terms can be searched at a time" - return render_template('index.html', message=message) - elif len(genes)==0: - message="Please enter a search term " - 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="

"+gene0 + " and " + cat0 + "


\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+= "
  • "+ text + " PMID:"+pmid+"
    " - return render_template('sentences.html', sentences="
      "+out+"

    ") - -@app.route("/shownode") -def shownode(): - node=request.args.get('node') - allnodes={**brain_d, **drug_d, **function_d, **addiction_d} - out="

    "+node.upper()+"


  • "+ allnodes[node].replace("|", "
  • ") - return render_template('sentences.html', sentences=out+"

    ") - - -if __name__ == '__main__': - app.run(debug=True) diff --git a/server.py b/server.py index 457a8cd..b171c1e 100755 --- a/server.py +++ b/server.py @@ -1,9 +1,10 @@ #!/bin/env python3 -from flask import Flask, render_template, request, redirect +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' @@ -12,11 +13,9 @@ app.config['SECRET_KEY'] = '#DtfrL98G5t1dC*4' def root(): return render_template('index.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)) - all_sentences=str() +@app.route('/progress') +def progress(): + # only 1-6 terms are allowed genes=request.args.get('query') genes=genes.replace(",", " ") genes=genes.replace(";", " ") @@ -24,30 +23,64 @@ def search(): if len(genes)>=6: message="Up to five terms can be searched at a time" return render_template('index.html', message=message) - nodes=default_nodes - edges=str() - for gene in genes: - nodes+="{ data: { id: '" + gene + "', nodecolor:'#FADBD8', fontweight:700, url:'https://www.ncbi.nlm.nih.gov/gene/?term="+gene+"'} },\n" - sent0=gene_addiction(gene) - e0=generate_edges(sent0, tf_name) - sent1=gene_functional(gene) - e1=generate_edges(sent1, tf_name) - sent2=gene_anatomical(gene) - e2=generate_edges(sent2, tf_name) - edges+=e0+e1+e2 - all_sentences+=sent0+sent1+sent2 - #session['tmpfile']={'filename':tf_name} - with open(tf_name,"w") as f: - f.write(all_sentences) - f.close() - return render_template('cytoscape.html', elements=nodes+edges) + elif len(genes)==0: + message="Please enter a search term " + 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(): + genes=session['query'] + percent=round(100/(len(genes)*3),1) + snt_file=session['path']+"_snt" + cysdata=open(session['path']+"_cy","w+") + sntdata=open(snt_file,"w+") + def generate(genes, tf_name): + sentences=str() + edges=str() + nodes=default_nodes + progress=0 + for gene in genes: + nodes+="{ data: { id: '" + gene + "', nodecolor:'#FADBD8', fontweight:700, url:'https://www.ncbi.nlm.nih.gov/gene/?term="+gene+"'} },\n" + sent0=gene_addiction(gene) + progress+=percent + 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+edges) + cysdata.close() + yield "data:"+str(progress)+"\n\n" + return Response(generate(genes, snt_file), 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="

    "+gene0 + " and " + cat0 + "


    \n" - print(tf_name) with open(tf_name, "r") as df: all_sents=df.read() for sent in all_sents.split("\n"): diff --git a/templates/index.html b/templates/index.html index 6d50a63..0771787 100644 --- a/templates/index.html +++ b/templates/index.html @@ -3,7 +3,7 @@


    {{ message | safe }} -

    +
    @@ -13,6 +13,12 @@
    Searches are conducted through PubMed to get relevant PMIDs, which are then used to retrieve the abstracts from a local archive. The gene-keyword relationships are presented as an interactive cytoscape graph. The nodes can be moved to better reveal the connections. Tap on the links will bring up the corresponding sentences in a new browser window.

    + +

    + + +
    +
    Source code diff --git a/templates/progress.html b/templates/progress.html index 322604d..7b4a9d0 100644 --- a/templates/progress.html +++ b/templates/progress.html @@ -3,25 +3,35 @@ - + +
    + We hope this won't take too long ... +
    +
    + 0%
    - +
    + {% endblock %} -- cgit v1.2.3