From 68cf0750ee29d91abf8fe8d0a81426e324b41b12 Mon Sep 17 00:00:00 2001 From: Frederick Muriuki Muriithi Date: Wed, 13 Jul 2022 02:37:52 +0300 Subject: Implement dataset selection - Implement UI enabling selection from existing datasets - Start implementation of UI that enables creation of new dataset --- qc_app/dbinsert.py | 22 +++- qc_app/static/js/dbinsert.js | 156 ------------------------- qc_app/templates/dbupdate_hidden_fields.html | 9 ++ qc_app/templates/select_dataset.html | 168 ++++++++++++--------------- qc_app/templates/select_study.html | 2 +- 5 files changed, 98 insertions(+), 259 deletions(-) delete mode 100644 qc_app/static/js/dbinsert.js diff --git a/qc_app/dbinsert.py b/qc_app/dbinsert.py index 4fbd0d3..523152d 100644 --- a/qc_app/dbinsert.py +++ b/qc_app/dbinsert.py @@ -177,6 +177,17 @@ def create_study(): flash(f"Missing data: {aserr.args[0]}", "alert-error") return redirect(url_for("dbinsert.select_study"), code=307) +def datasets_by_study(studyid:int) -> tuple: + "Retrieve datasets associated with a study with the ID `studyid`." + with database_connection() as conn: + with conn.cursor(cursorclass=DictCursor) as cursor: + query = "SELECT * FROM ProbeSetFreeze WHERE ProbeFreezeId=%s" + print(f"QUERY: {query}\n\tPARAMS: ({studyid},)") + cursor.execute(query, (studyid,)) + return tuple(cursor.fetchall()) + + return tuple() + @dbinsertbp.route("/dataset", methods=["POST"]) def select_dataset(): "Select the dataset to add the file contents against" @@ -186,15 +197,14 @@ def select_dataset(): assert form.get("filetype"), "filetype" assert form.get("species"), "species" assert form.get("genechipid"), "platform" - assert (form.get("studyid") or form.get(studyname)), "" - assert form.get(""), "" - assert form.get(""), "" - assert form.get(""), "" - assert form.get(""), "" + assert (form.get("studyid") or request.args.get("studyid")), "study" + studyid=(form.get("studyid") or request.args.get("studyid")) + datasets = datasets_by_study(studyid) return render_template( "select_dataset.html", filename=form["filename"], - filetype=form["filetype"], species=speciesid, genechipid=genechipid) + filetype=form["filetype"], species=form["species"], + genechipid=form["genechipid"], studyid=studyid, datasets=datasets) except AssertionError as aserr: return render_error(f"Missing data: {aserr.args[0]}") diff --git a/qc_app/static/js/dbinsert.js b/qc_app/static/js/dbinsert.js deleted file mode 100644 index 63d2c86..0000000 --- a/qc_app/static/js/dbinsert.js +++ /dev/null @@ -1,156 +0,0 @@ -function remove_children(element) { - Array.from(element.children).forEach(child => { - element.removeChild(child); - }); -} - -function trigger_change_event(element) { - evt = new Event("change"); - element.dispatchEvent(evt); -} - -function setup_groups(group_data) { - elt = document.getElementById("group"); - remove_children(elt); - the_groups = group_data.reduce( - function(acc, row) { - grouping = row[2].slice(7).trim(); - if(acc[grouping] === undefined) { - acc[grouping] = []; - } - acc[grouping].push([row[0], row[1]]); - return acc; - }, - {}); - for(grouping in the_groups) { - optgrp = document.createElement("optgroup"); - optgrp.setAttribute("label", grouping); - the_groups[grouping].forEach(group => { - opt = document.createElement("option"); - opt.setAttribute("value", group[0]); - opt.appendChild(document.createTextNode(group[1])); - optgrp.appendChild(opt); - }); - elt.appendChild(optgrp); - } - trigger_change_event(elt); -} - -function setup_types(type_data) { - elt = document.getElementById("type"); - remove_children(elt); - the_types = type_data.reduce(function(acc, row) { - grp = row[2]; - if(acc[grp] === undefined) { - acc[grp] = []; - } - acc[grp].push([row[0], row[1]]); - return acc; - }, {}); - for(type_group in the_types) { - optgrp = document.createElement("optgroup"); - optgrp.setAttribute("label", type_group); - the_types[type_group].forEach(type => { - opt = document.createElement("option"); - opt.setAttribute("value", type[0]); - opt.appendChild(document.createTextNode(type[1])); - optgrp.appendChild(opt); - }); - elt.appendChild(optgrp); - } - trigger_change_event(elt); -} - -function setup_datasets(dataset_data) { - elt = document.getElementById("dataset"); - remove_children(elt); - dataset_data.forEach(dataset => { - opt = document.createElement("option"); - opt.setAttribute("value", dataset[0]); - opt.appendChild(document.createTextNode( - "[" + dataset[1] + "] " + dataset[2])); - elt.appendChild(opt); - }); - trigger_change_event(elt); -} - -function radio_column(chip) { - col = document.createElement("td"); - radio = document.createElement("input"); - radio.setAttribute("type", "radio"); - radio.setAttribute("name", "genechipid"); - radio.setAttribute("value", chip["GeneChipId"]); - radio.setAttribute("required", "required"); - col.appendChild(radio); - return col; -} - -function setup_genechips(genechip_data) { - columns = ["GeneChipName", "Name", "GeoPlatform", "GO_tree_value"] - submit_button = document.querySelector( - "#select-dataset-form input[type='submit']"); - elt = document.getElementById( - "genechips-table").getElementsByTagName("tbody")[0]; - remove_children(elt); - if((genechip_data === undefined) || genechip_data.length === 0) { - row = document.createElement("tr"); - col = document.createElement("td"); - col.setAttribute("colspan", "5"); - text = document.createTextNode("No chips found for selected species"); - col.appendChild(text); - row.appendChild(col); - elt.appendChild(row); - submit_button.setAttribute("disabled", true); - return false; - } - - submit_button.removeAttribute("disabled") - genechip_data.forEach(chip => { - row = document.createElement("tr"); - row.appendChild(radio_column(chip)); - columns.forEach(column => { - col = document.createElement("td"); - content = document.createTextNode(chip[column]); - col.appendChild(content); - row.appendChild(col); - }); - elt.appendChild(row); - }); -} - -function menu_contents() { - return JSON.parse( - document.getElementById("select-dataset-form").getAttribute( - "data-menu-content")); -} - -function genechips() { - return JSON.parse( - document.getElementById("select-dataset-form").getAttribute( - "data-genechips")); -} - -function update_menu(event) { - menu = menu_contents(); - genec = genechips(); - - species_elt = document.getElementById("species"); - group_elt = document.getElementById("group"); - type_elt = document.getElementById("type"); - dataset_elt = document.getElementById("dataset"); - - if(event.target == species_elt) { - setup_groups(menu["groups"][species_elt.value]); - setup_genechips(genec[species_elt.value.toLowerCase()]); - } - - if(event.target == group_elt) { - setup_types(menu["types"][species_elt.value][group_elt.value]); - } - - if(event.target == type_elt) { - setup_datasets( - menu["datasets"][species_elt.value][group_elt.value][type_elt.value] - ); - } -} diff --git a/qc_app/templates/dbupdate_hidden_fields.html b/qc_app/templates/dbupdate_hidden_fields.html index ec31202..c66ebba 100644 --- a/qc_app/templates/dbupdate_hidden_fields.html +++ b/qc_app/templates/dbupdate_hidden_fields.html @@ -10,5 +10,14 @@ {%if kwargs.get("genechipid"):%} {%endif%} +{%if kwargs.get("inbredsetid"):%} + +{%endif%} +{%if kwargs.get("tissueid"):%} + +{%endif%} +{%if kwargs.get("studyid"):%} + +{%endif%} {%endmacro%} diff --git a/qc_app/templates/select_dataset.html b/qc_app/templates/select_dataset.html index 4846f2c..59ead59 100644 --- a/qc_app/templates/select_dataset.html +++ b/qc_app/templates/select_dataset.html @@ -1,111 +1,87 @@ {%extends "base.html"%} +{%from "dbupdate_hidden_fields.html" import hidden_fields%} {%block title%}Select Dataset{%endblock%} +{%block css%} + +{%endblock%} + {%block contents%}
OR
+ +