aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrederick Muriuki Muriithi2022-07-08 10:39:19 +0300
committerFrederick Muriuki Muriithi2022-07-19 04:59:59 +0300
commit3038c5166aad408d7255f83668b78d635878d3d3 (patch)
treed9384464a1f3c92b50db747346e74cfbc8396119
parent7a3a54ec40fac9071a513487602957f8418f163e (diff)
downloadgn-uploader-3038c5166aad408d7255f83668b78d635878d3d3.tar.gz
Implement select study
Implement the select study UI
-rw-r--r--qc_app/dbinsert.py36
-rw-r--r--qc_app/static/css/styles.css8
-rw-r--r--qc_app/static/css/two-column-with-separator.css27
-rw-r--r--qc_app/templates/select_platform.html2
-rw-r--r--qc_app/templates/select_study.html88
5 files changed, 158 insertions, 3 deletions
diff --git a/qc_app/dbinsert.py b/qc_app/dbinsert.py
index ea47806..e506175 100644
--- a/qc_app/dbinsert.py
+++ b/qc_app/dbinsert.py
@@ -53,6 +53,23 @@ def genechips():
return {}
+def studies_by_species_and_platform(speciesid:int, genechipid:int) -> tuple:
+ "Retrieve the studies by the related species and gene platform"
+ with database_connection() as conn:
+ with conn.cursor(cursorclass=DictCursor) as cursor:
+ query = (
+ "SELECT Species.SpeciesId, ProbeFreeze.* "
+ "FROM Species INNER JOIN InbredSet "
+ "ON Species.SpeciesId=InbredSet.SpeciesId "
+ "INNER JOIN ProbeFreeze "
+ "ON InbredSet.InbredSetId=ProbeFreeze.InbredSetId "
+ "WHERE Species.SpeciesId = %s "
+ "AND ProbeFreeze.ChipId = %s")
+ cursor.execute(query, (speciesid, genechipid))
+ return tuple(cursor.fetchall())
+
+ return tuple()
+
@dbinsertbp.route("/platform", methods=["POST"])
def select_platform():
"Select the platform (GeneChipId) used for the data."
@@ -76,7 +93,24 @@ def select_platform():
@dbinsertbp.route("/study", methods=["POST"])
def select_study():
- return "Not implemented yet"
+ "View to select/create the study (ProbeFreeze) associated with the data."
+ form = request.form
+ try:
+ assert form.get("filename"), "filename"
+ assert form.get("filetype"), "filetype"
+ assert form.get("species"), "species"
+ assert form.get("genechipid"), "platform"
+
+ speciesid = form["species"]
+ genechipid = form["genechipid"]
+
+ the_studies = studies_by_species_and_platform(speciesid, genechipid)
+ return render_template(
+ "select_study.html", filename=form["filename"],
+ filetype=form["filetype"], species=speciesid, genechipid=genechipid,
+ studies=the_studies)
+ except AssertionError as aserr:
+ return render_error(f"Missing data: {aserr.args[0]}")
@dbinsertbp.route("/select-dataset", methods=["POST"])
def select_dataset():
diff --git a/qc_app/static/css/styles.css b/qc_app/static/css/styles.css
index d27952a..a42ffb0 100644
--- a/qc_app/static/css/styles.css
+++ b/qc_app/static/css/styles.css
@@ -117,10 +117,16 @@ fieldset {
.form-col-2 {
grid-column: 2 / 3;
- width: 20%;
}
input[disabled="true"],input[disabled="disabled"] {
border-color: #878787;
background-color: #A9A9A9;
}
+
+form legend {
+ padding-left: 3em;
+ text-transform: capitalize;
+ font-weight: bolder;
+ line-height: 2em;
+}
diff --git a/qc_app/static/css/two-column-with-separator.css b/qc_app/static/css/two-column-with-separator.css
new file mode 100644
index 0000000..b6efd46
--- /dev/null
+++ b/qc_app/static/css/two-column-with-separator.css
@@ -0,0 +1,27 @@
+.two-column-with-separator {
+ display: grid;
+ grid-template-columns: 9fr 1fr 9fr;
+}
+
+.two-col-sep-col1 {
+ grid-column: 1 / 2;
+}
+
+.two-col-sep-separator {
+ grid-column: 2 / 3;
+ text-align: center;
+ color: #FE3535;
+ font-weight: bolder;
+}
+
+.two-col-sep-col2 {
+ grid-column: 3 / 4;
+}
+
+.two-col-sep-col1, .two-col-sep-col2 {
+ border-style: solid;
+ border-color: #FE3535;
+ border-width: 1px;
+ border-radius: 2em;
+ padding: 2em 3em 2em 3em;
+}
diff --git a/qc_app/templates/select_platform.html b/qc_app/templates/select_platform.html
index f8db736..131003d 100644
--- a/qc_app/templates/select_platform.html
+++ b/qc_app/templates/select_platform.html
@@ -3,7 +3,7 @@
{%block title%}Select Dataset{%endblock%}
{%block contents%}
-<h1 class="heading">{{filename}}: select platform</h2>
+<h2 class="heading">{{filename}}: select platform</h2>
<form method="POST" action="{{url_for('dbinsert.select_study')}}"
id="select-platform-form" data-genechips="{{genechips_data}}">
diff --git a/qc_app/templates/select_study.html b/qc_app/templates/select_study.html
new file mode 100644
index 0000000..8d7a98b
--- /dev/null
+++ b/qc_app/templates/select_study.html
@@ -0,0 +1,88 @@
+{%extends "base.html"%}
+
+{%block title%}Select Dataset{%endblock%}
+
+{%block css%}
+<link rel="stylesheet" href="/static/css/two-column-with-separator.css" />
+{%endblock%}
+
+{%block contents%}
+<h2 class="heading">{{filename}}: select study</h2>
+
+<div class="two-column-with-separator">
+ <form method="POST" action="{{url_for('dbinsert.select_study')}}"
+ id="select-platform-form" data-genechips="{{genechips_data}}"
+ class="two-col-sep-col1">
+ <legend>Select from existing study</legend>
+ <input type="hidden" name="filename" value="{{filename}}" />
+ <input type="hidden" name="filetype" value="{{filetype}}" />
+ <input type="hidden" name="species" value="{{species}}" />
+ <input type="hidden" name="genechipid" value="{{genechipid}}" />
+
+ <fieldset>
+ <label for="study" class="form-col-1">study:</label>
+ <select id="study" name="studyid" class="form-col-2">
+ {%for study in studies:%}
+ <option value="{{study['ProbeFreezeId']}}">{{study["Name"]}}</option>
+ {%endfor%}
+ </select>
+ </fieldset>
+
+ <fieldset>
+ <input type="submit" value="submit selected study"
+ class="btn btn-main form-col-2"
+ {%if studies | length == 0:%}
+ disabled="disabled"
+ {%endif%} />
+ </fieldset>
+ </form>
+
+ <p class="two-col-sep-separator">OR</p>
+
+ <form method="POST" action="{{url_for('dbinsert.select_study')}}"
+ id="select-platform-form" data-genechips="{{genechips_data}}"
+ class="two-col-sep-col2">
+ <legend>Create new study</legend>
+ <input type="hidden" name="filename" value="{{filename}}" />
+ <input type="hidden" name="filetype" value="{{filetype}}" />
+ <input type="hidden" name="species" value="{{species}}" />
+ <input type="hidden" name="genechipid" value="{{genechipid}}" />
+
+ <fieldset>
+ <label for="studyname" class="form-col-1">name:</label>
+ <input type="text" id="studyname" name="studyname" class="form-col-2"
+ required="required" />
+ </fieldset>
+
+ <fieldset>
+ <label for="studyfullname" class="form-col-1">full name:</label>
+ <input type="text" id="studyfullname" name="studyfullname"
+ class="form-col-2" />
+ </fieldset>
+
+ <fieldset>
+ <label for="studyshortname" class="form-col-1">short name:</label>
+ <input type="text" id="studyshortname" name="studyshortname"
+ class="form-col-2" />
+ </fieldset>
+
+ <fieldset>
+ <label for="group" class="form-col-1">group:</label>
+ <select id="group" name="inbredsetid" class="form-col-2">
+ </select>
+ </fieldset>
+
+ <fieldset>
+ <label for="tissue" class="form-col-1">tissue:</label>
+ <select id="tissue" name="tissueid" class="form-col-2">
+ </select>
+ </fieldset>
+
+ <fieldset>
+ <input type="submit" value="create study"
+ class="btn btn-main form-col-2" />
+ </fieldset>
+ </form>
+</div>
+
+{%endblock%}