aboutsummaryrefslogtreecommitdiff
path: root/uploader/phenotypes
diff options
context:
space:
mode:
Diffstat (limited to 'uploader/phenotypes')
-rw-r--r--uploader/phenotypes/views.py42
1 files changed, 40 insertions, 2 deletions
diff --git a/uploader/phenotypes/views.py b/uploader/phenotypes/views.py
index 862a224..9185f4c 100644
--- a/uploader/phenotypes/views.py
+++ b/uploader/phenotypes/views.py
@@ -1,10 +1,18 @@
"""Views handling ('classical') phenotypes."""
-from flask import request, Blueprint, render_template, current_app as app
+from flask import (request,
+ url_for,
+ redirect,
+ Blueprint,
+ render_template,
+ current_app as app)
from uploader.datautils import order_by_family
from uploader.authorisation import require_login
from uploader.db_utils import database_connection
from uploader.species.models import all_species, species_by_id
+from uploader.request_checks import with_species, with_population
+from uploader.population.models import (populations_by_species,
+ population_by_species_and_id)
phenotypesbp = Blueprint("phenotypes", __name__)
@@ -22,4 +30,34 @@ def index():
if not bool(species):
flash("No such species!", "alert-danger")
return redirect(url_for("species.populations.phenotypes.index"))
- return "Would lead you to go select population…"
+ return redirect(url_for("species.populations.phenotypes.select_population",
+ species_id=species["SpeciesId"]))
+
+
+@phenotypesbp.route("<int:species_id>/phenotypes/select-population",
+ methods=["GET"])
+@require_login
+@with_species(redirect_uri="species.populations.phenotypes.index")
+def select_population(species: dict, **kwargs):
+ """Select the population for your phenotypes."""
+ with database_connection(app.config["SQL_URI"]) as conn:
+ if not bool(request.args.get("population_id")):
+ return render_template("phenotypes/select-population.html",
+ species=species,
+ populations=order_by_family(
+ populations_by_species(
+ conn, species["SpeciesId"]),
+ order_key="FamilyOrder"),
+ activelink="phenotypes")
+
+ population = population_by_species_and_id(
+ conn, species["SpeciesId"], int(request.args["population_id"]))
+ if not bool(population):
+ flash("No such population found!", "alert-danger")
+ return redirect(url_for(
+ "species.populations.phenotypes.select_population",
+ species_id=species_id))
+
+ return redirect(url_for("species.populations.phenotypes.list_datasets",
+ species_id=species["SpeciesId"],
+ population_id=population["Id"]))