diff options
author | Frederick Muriuki Muriithi | 2024-01-05 13:08:38 +0300 |
---|---|---|
committer | Frederick Muriuki Muriithi | 2024-01-05 13:10:56 +0300 |
commit | 58a214a4a9be5fb219a798b62cdbf43d72280c74 (patch) | |
tree | 1ab9beaa142a4887e44aa6fe09e1206a959b024a | |
parent | 6200a60eb6f04a5d50bfe0ad366674dc49a08119 (diff) | |
download | gn-uploader-58a214a4a9be5fb219a798b62cdbf43d72280c74.tar.gz |
Initialise R/qtl2 bundle upload path
Initialise the upload path for R/qtl2 bundles. This commit adds UI
that allows the user to select from existing species, before
proceeding to the next stage.
-rw-r--r-- | qc_app/__init__.py | 2 | ||||
-rw-r--r-- | qc_app/templates/base.html | 2 | ||||
-rw-r--r-- | qc_app/templates/rqtl2/index.html | 34 | ||||
-rw-r--r-- | qc_app/upload/__init__.py | 7 | ||||
-rw-r--r-- | qc_app/upload/rqtl2.py | 31 |
5 files changed, 75 insertions, 1 deletions
diff --git a/qc_app/__init__.py b/qc_app/__init__.py index f2001ab..1215954 100644 --- a/qc_app/__init__.py +++ b/qc_app/__init__.py @@ -5,6 +5,7 @@ import os from flask import Flask from .entry import entrybp +from .upload import upload from .parse import parsebp from .samples import samples from .dbinsert import dbinsertbp @@ -30,6 +31,7 @@ def create_app(instance_dir): # setup blueprints app.register_blueprint(entrybp, url_prefix="/") app.register_blueprint(parsebp, url_prefix="/parse") + app.register_blueprint(upload, url_prefix="/upload") app.register_blueprint(dbinsertbp, url_prefix="/dbinsert") app.register_blueprint(samples, url_prefix="/samples") diff --git a/qc_app/templates/base.html b/qc_app/templates/base.html index 0cc970c..3b701bc 100644 --- a/qc_app/templates/base.html +++ b/qc_app/templates/base.html @@ -11,7 +11,7 @@ <link rel="stylesheet" type="text/css" href="/static/css/styles.css" /> {%block css%}{%endblock%} - <link rel="icon" type="image/png" sizes="64x64" + <link rel="shortcut icon" type="image/png" sizes="64x64" href="/static/images/CITGLogo.png" /> </head> diff --git a/qc_app/templates/rqtl2/index.html b/qc_app/templates/rqtl2/index.html new file mode 100644 index 0000000..24f19fa --- /dev/null +++ b/qc_app/templates/rqtl2/index.html @@ -0,0 +1,34 @@ +{%extends "base.html"%} +{%from "flash_messages.html" import flash_messages%} + +{%block title%}Data Upload{%endblock%} + +{%block contents%} +<h1 class="heading">R/qtl2 data upload</h1> + +<h2>R/qtl2 Upload</h2> + +<form method="POST" action="{{url_for('upload.rqtl2.select_species')}}" + id="frm-rqtl2-upload"> + <legend class="heading">upload R/qtl2 bundle</legend> + {{flash_messages("error-rqtl2")}} + <fieldset> + <label for="select:species">Species</label> + <select id="select:species" name="species_id" required="required"> + <option value="">Select species</option> + {%for spec in species%} + <option value="{{spec.SpeciesId}}">{{spec.MenuName}}</option> + {%endfor%} + </select> + <span class="form-input-help"> + Data that you upload to the system should belong to a know species. + Here you can select the species that you wish to upload data for. + </span> + </fieldset> + + <fieldset> + <input type="submit" value="submit" class="btn btn-main form-col-2" /> + </fieldset> +</form> + +{%endblock%} diff --git a/qc_app/upload/__init__.py b/qc_app/upload/__init__.py new file mode 100644 index 0000000..5f120d4 --- /dev/null +++ b/qc_app/upload/__init__.py @@ -0,0 +1,7 @@ +"""Package handling upload of files.""" +from flask import Blueprint + +from .rqtl2 import rqtl2 + +upload = Blueprint("upload", __name__) +upload.register_blueprint(rqtl2, url_prefix="/rqtl2") diff --git a/qc_app/upload/rqtl2.py b/qc_app/upload/rqtl2.py new file mode 100644 index 0000000..e54f141 --- /dev/null +++ b/qc_app/upload/rqtl2.py @@ -0,0 +1,31 @@ +"""Module to handle uploading of R/qtl2 bundles.""" + +from flask import ( + flash, + request, + url_for, + redirect, + Blueprint, + render_template) + +from qc_app.dbinsert import species as all_species +from qc_app.dbinsert import species_by_id, groups_by_species +from qc_app.db_utils import with_db_connection + +rqtl2 = Blueprint("rqtl2", __name__) + +@rqtl2.route("/", methods=["GET", "POST"]) +@rqtl2.route("/select-species", methods=["POST"]) +def select_species(): + """Select the species.""" + if request.method == "GET": + return render_template("rqtl2/index.html", species=all_species()) + + species_id = request.form.get("species_id") + species = with_db_connection( + lambda conn: species_by_id(conn, species_id)) + if bool(species): + return redirect(url_for( + "upload.rqtl2.select_population", species_id=species_id)) + flash("Invalid species or no species selected!", "alert-error error-rqtl2") + return redirect(url_for("upload.rqtl2.select_species")) |