about summary refs log tree commit diff
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%}