diff options
-rw-r--r-- | bh20simplewebuploader/main.py | 21 | ||||
-rw-r--r-- | bh20simplewebuploader/static/main.js | 49 | ||||
-rw-r--r-- | bh20simplewebuploader/templates/export.html | 22 |
3 files changed, 81 insertions, 11 deletions
diff --git a/bh20simplewebuploader/main.py b/bh20simplewebuploader/main.py index b88055f..48520fe 100644 --- a/bh20simplewebuploader/main.py +++ b/bh20simplewebuploader/main.py @@ -692,7 +692,26 @@ def getCountDB(): # Execute a 'global search' @app.route('/api/search', methods=['GET']) def search(): - return jsonify(["TESTME"]) + s = request.args.get('s') + query = """ + PREFIX pubseq: <http://biohackathon.org/bh20-seq-schema#MainSchema/> + PREFIX sio: <http://semanticscience.org/resource/> + select distinct ?id ?seq + { + ?sample sio:SIO_000115 "%s" . + ?sample sio:SIO_000115 ?id . + ?seq pubseq:sample ?sample . + ?sample ?p ?o . + } + """ % s + payload = {'query': query, 'format': 'json'} + r = requests.get(baseURL, params=payload) + result = r.json()['results']['bindings'] + print(result,file=sys.stderr); + return jsonify([{ + 'id': x['id']['value'], + 'seq': x['seq']['value'], + } for x in result]) @app.route('/api/getAllaccessions', methods=['GET']) def getAllaccessions(): diff --git a/bh20simplewebuploader/static/main.js b/bh20simplewebuploader/static/main.js index dc0864b..8271d2c 100644 --- a/bh20simplewebuploader/static/main.js +++ b/bh20simplewebuploader/static/main.js @@ -2,6 +2,24 @@ * Menu and navigation */ +/* Convert a list of table items to an HTML DIV table */ +function toDIVTable(rows) { + if (rows.length == 0) + html = "no results"; + else { + html = '<div class="rTable">'; + rows.forEach(row => { + html += '<div class="rTableRow">'; + html += ' <div class="rTableCell">'; + html += row["id"]; + html += ' </div>'; + html += '</div>'; + }); + html += '</div>'; + } + document.getElementById("table").innerHTML = html; +} + /* Toggle between adding and removing the "responsive" class to topnav * when the user clicks on the icon */ function myFunction() { @@ -13,13 +31,16 @@ function myFunction() { } } -function fetchAPI(apiEndPoint) { +function fetchAPI(apiEndPoint,injectHTML=NULL) { fetch(scriptRoot + apiEndPoint) .then(response => { + console.log("* response",response); return response.json(); }) .then(data => { - console.log(data); + console.log("* data",data); + if (injectHTML) + injectHTML(data); }); } @@ -48,11 +69,29 @@ function fetchHTMLTable(apiEndPoint) { }); } +/* Fetch record info using a 'global search'. Returns for example + +[ + { + "id": "MT326090.1", + "seq": "http://collections.lugli.arvadosapi.com/c=10eaef75e0b875f81aa1f411c75370cf+126/sequence.fasta" + }, + { + "id": "MT326090.1", + "seq": "http://collections.lugli.arvadosapi.com/c=5a4c815f3e076ad7760a91864c39dd07+126/sequence.fasta" + } +] + -/* Fetch record info using a 'global search' */ -let searchGlobal = () => { + */ +let searchGlobal = (toHTML) => { let m = document.getElementById('search-input').value; - fetchAPI(scriptRoot + "/api/search?s=" + encodeURIComponent(m)); + fetchAPI(scriptRoot + "/api/search?s=" + encodeURIComponent(m), toHTML); +} + +// Same as above, but generates div table +let searchGlobaltoDIVTable = () => { + searchGlobal(toDIVTable); } let searchSeq = () => { diff --git a/bh20simplewebuploader/templates/export.html b/bh20simplewebuploader/templates/export.html index f105290..1f0d9b7 100644 --- a/bh20simplewebuploader/templates/export.html +++ b/bh20simplewebuploader/templates/export.html @@ -11,24 +11,36 @@ COVID-19 PubSeq allows for exporting forms and data for other services. + <h2>SPARQL</h2> + + <p> + First of all, PubSeq exports a SPARQL endpoint + <a href="http://sparql.genenetwork.org/sparql/">here</a> that allows + you do do any query on the data. See this + <a href="/blog?id=using-covid-19-pubseq-part1">document</a> for + examples. + </p> + <h2>Export EBI/ENA Forms</h2> <p> - Uploading data to EBI/ENA with PubSeq is described - <a href="/blog?id=using-covid-19-pubseq-part6">here</a>. - To export, first search for an uploaded entry through its - identifier: + Uploading data to EBI/ENA with PubSeq is described + <a href="/blog?id=using-covid-19-pubseq-part6">here</a>. To + export, first search for an uploaded entry through its + identifier: </p> <div class="search"> <input id="search-input" type="search" placeholder="e.g. MT246484" required> - <button class="button search-button" type="submit" onclick="searchGlobal()"> + <button class="button search-button" type="submit" onclick="searchGlobaltoDIVTable()"> <span class="icon ion-search"> <span class="sr-only">Search</span> </span> </button> </div> + <section id="table" /> + </section> {% include 'footer.html' %} |