aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrederick Muriuki Muriithi2022-07-13 02:37:52 +0300
committerFrederick Muriuki Muriithi2022-07-19 04:59:59 +0300
commit68cf0750ee29d91abf8fe8d0a81426e324b41b12 (patch)
treeed1b752cb63937ebe5d1c5cca812cbd0f7bd65a6
parent27032e1876373f9b519275bffbca117f2c96ca1f (diff)
downloadgn-uploader-68cf0750ee29d91abf8fe8d0a81426e324b41b12.tar.gz
Implement dataset selection
- Implement UI enabling selection from existing datasets - Start implementation of UI that enables creation of new dataset
-rw-r--r--qc_app/dbinsert.py22
-rw-r--r--qc_app/static/js/dbinsert.js156
-rw-r--r--qc_app/templates/dbupdate_hidden_fields.html9
-rw-r--r--qc_app/templates/select_dataset.html168
-rw-r--r--qc_app/templates/select_study.html2
5 files changed, 98 insertions, 259 deletions
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"):%}
<input type="hidden" name="genechipid" value="{{kwargs['genechipid']}}" />
{%endif%}
+{%if kwargs.get("inbredsetid"):%}
+<input type="hidden" name="inbredsetid" value="{{kwargs['inbredsetid']}}" />
+{%endif%}
+{%if kwargs.get("tissueid"):%}
+<input type="hidden" name="tissueid" value="{{kwargs['tissueid']}}" />
+{%endif%}
+{%if kwargs.get("studyid"):%}
+<input type="hidden" name="studyid" value="{{kwargs['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%}
+<link rel="stylesheet" href="/static/css/two-column-with-separator.css" />
+{%endblock%}
+
{%block contents%}
<h1 class="heading">{{filename}}: select dataset</h2>
-<form method="POST" action="{{url_for('dbinsert.insert_data')}}"
- id="select-dataset-form"
- data-menu-content="{{menu_contents}}"
- data-genechips="{{genechips_data}}">
- <input type="hidden" name="filename" value="{{filename}}" />
- <input type="hidden" name="filetype" value="{{filetype}}" />
-
- <fieldset>
- <label for="species" class="form-col-1">species:</label>
- <select id="species" name="species" class="form-col-2">
- {%for row in species:%}
- <option value="{{row[0]}}"
- {%if row[0] == default_species:%}
- selected="selected"
+<div class="two-column-with-separator">
+ <form method="POST" action="{{url_for('dbinsert.insert_data')}}"
+ id="select-dataset-form" class="two-col-sep-col1">
+ <legend>choose existing dataset</legend>
+ {{hidden_fields(
+ filename, filetype, species=species, genechipid=genechipid,
+ studyid=studyid)}}
+
+ <fieldset>
+ <label for="dataset" class="form-col-1">dataset:</label>
+ <select id="dataset" name="dataset" class="form-col-2"
+ {%if datasets | length == 0:%}
+ disabled="disabled"
{%endif%}>
- {{row[1]}}
- </option>
- {%endfor%}
- </select>
- </fieldset>
-
- <fieldset>
- <label for="group" class="form-col-1">group:</label>
- <select id="group" name="group" class="form-col-2">
- {%for grouping, grps in groups.items():%}
- <optgroup label="{{grouping}}">
- {%for group in grps:%}
- <option value="{{group[0]}}">{{group[1]}}</option>
- {%endfor%}
- </optgroup>
- {%endfor%}
- </select>
- </fieldset>
-
- <fieldset>
- <label for="type" class="form-col-1">type:</label>
- <select id="type" name="type" class="form-col-2">
- {%for grouping, typs in types.items():%}
- <optgroup label="{{grouping}}">
- {%for type in typs:%}
- <option value="{{type[0]}}">{{type[1]}}</option>
+ {%for dataset in datasets:%}
+ <option value="{{dataset['Id']}}">
+ [{{dataset["Name"]}}] - {{dataset["FullName"]}}
+ </option>
{%endfor%}
- </optgroup>
- {%endfor%}
- </select>
- </fieldset>
-
- <fieldset>
- <label for="dataset" class="form-col-1">dataset:</label>
- <select id="dataset" name="dataset" class="form-col-2">
- {%for dataset_id, name1, name2 in datasets:%}
- <option value="{{dataset_id}}">[{{name1}}] {{name2}}</option>
- {%endfor%}
- </select>
- </fieldset>
-
- <table id="genechips-table">
- <thead>
- <tr>
- <th>Select</th>
- <th>GeneChip Name</th>
- <th>Name</th>
- <th>GeoPlatform</th>
- <th>GO Tree Value</th>
- </tr>
- </thead>
-
- <tbody>
- {%for chip in genechips:%}
- <tr>
- <td>
- <input type="radio" name="genechipid" value="{{chip['GeneChipId']}}"
- required="required" />
- </td>
- <td>{{chip["GeneChipName"]}}</td>
- <td>{{chip["Name"]}}</td>
- <td>{{chip["GeoPlatform"]}}</td>
- <td>{{chip["GO_tree_value"]}}</td>
- </tr>
- {%else%}
- <tr>
- <td colspan="5">No chips found for selected species</td>
- </tr>
- {%endfor%}
- </tbody>
- </table>
-
- <fieldset>
- <input type="submit" class="btn btn-main form-col-2"
- value="update database" />
- </fieldset>
-
-</form>
+ </select>
+ </fieldset>
+
+ <fieldset>
+ <input type="submit" class="btn btn-main form-col-2"
+ value="update database"
+ {%if datasets | length == 0:%}
+ disabled="disabled"
+ {%endif%} />
+ </fieldset>
+ </form>
+
+ <p class="two-col-sep-separator">OR</p>
+
+ <form method="POST" id="create-dataset-form"
+ class="two-col-sep-col2">
+ <legend>create new dataset</legend>
+ {{hidden_fields(
+ filename, filetype, species=species, genechipid=genechipid,
+ studyid=studyid)}}
+
+ <fieldset>
+ <label for="avgid">average:</label>
+ <select id="avgid" name="avgid" required="required">
+ <option value="">Select averaging method</option>
+ </select>
+ </fieldset>
+
+ <fieldset>
+ <label for="datasetname">name:</label>
+ <input id="datasetname" name="datasetname" type="text" />
+ </fieldset>
+
+ <fieldset>
+ <label for="datasetname2">name 2:</label>
+ <input id="datasetname2" name="datasetname2" type="text" />
+ </fieldset>
+
+ <fieldset>
+ <label for="datasetfullname">full name:</label>
+ <input id="datasetfullname" name="datasetfullname" type="text" />
+ </fieldset>
+
+ <fieldset>
+ <label for="datasetshortname">full name:</label>
+ <input id="datasetshortname" name="datasetshortname" type="text" />
+ </fieldset>
+ </form>
+
+</div>
{%endblock%}
{%block javascript%}
<script type="text/javascript" src="/static/js/dbinsert.js"></script>
-<script type="text/javascript">
- document.getElementById("species").addEventListener("change", update_menu);
- document.getElementById("group").addEventListener("change", update_menu);
- document.getElementById("type").addEventListener("change", update_menu);
-</script>
{%endblock%}
diff --git a/qc_app/templates/select_study.html b/qc_app/templates/select_study.html
index e4b629c..d8bdcf0 100644
--- a/qc_app/templates/select_study.html
+++ b/qc_app/templates/select_study.html
@@ -11,7 +11,7 @@
<h2 class="heading">{{filename}}: select study</h2>
<div class="two-column-with-separator">
- <form method="POST" action="{{url_for('dbinsert.select_study')}}"
+ <form method="POST" action="{{url_for('dbinsert.select_dataset')}}"
id="select-platform-form" data-genechips="{{genechips_data}}"
class="two-col-sep-col1">
<legend>Select from existing study</legend>