aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrederick Muriuki Muriithi2024-09-26 16:01:34 -0500
committerFrederick Muriuki Muriithi2024-09-26 16:01:34 -0500
commite9c343766ac9ca5831b223960941a5fe8d837e30 (patch)
tree4c4b7d4dde5b33c530abfbf79ca2a28e8a8c41e2
parentd13071900de2ba73b829f52b96a1593da600118a (diff)
downloadgn-uploader-e9c343766ac9ca5831b223960941a5fe8d837e30.tar.gz
Enable selecting population for phenotypes.
-rw-r--r--uploader/phenotypes/views.py42
-rw-r--r--uploader/templates/phenotypes/select-population.html28
2 files changed, 68 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"]))
diff --git a/uploader/templates/phenotypes/select-population.html b/uploader/templates/phenotypes/select-population.html
new file mode 100644
index 0000000..eafd4a7
--- /dev/null
+++ b/uploader/templates/phenotypes/select-population.html
@@ -0,0 +1,28 @@
+{%extends "phenotypes/base.html"%}
+{%from "flash_messages.html" import flash_all_messages%}
+{%from "species/macro-display-species-card.html" import display_species_card%}
+{%from "populations/macro-select-population.html" import select_population_form%}
+
+{%block title%}Phenotypes{%endblock%}
+
+{%block pagetitle%}Phenotypes{%endblock%}
+
+
+{%block contents%}
+{{flash_all_messages()}}
+
+<div class="row">
+ <p>Select the population for your phenotypes to view and manage the phenotype
+ datasets that relate to it.</p>
+</div>
+
+<div class="row">
+ {{select_population_form(url_for("species.populations.phenotypes.select_population",
+ species_id=species.SpeciesId),
+ populations)}}
+</div>
+{%endblock%}
+
+{%block sidebarcontents%}
+{{display_species_card(species)}}
+{%endblock%}