From e9c343766ac9ca5831b223960941a5fe8d837e30 Mon Sep 17 00:00:00 2001 From: Frederick Muriuki Muriithi Date: Thu, 26 Sep 2024 16:01:34 -0500 Subject: Enable selecting population for phenotypes. --- uploader/phenotypes/views.py | 42 ++++++++++++++++++++-- .../templates/phenotypes/select-population.html | 28 +++++++++++++++ 2 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 uploader/templates/phenotypes/select-population.html 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("/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()}} + +
+

Select the population for your phenotypes to view and manage the phenotype + datasets that relate to it.

+
+ +
+ {{select_population_form(url_for("species.populations.phenotypes.select_population", + species_id=species.SpeciesId), + populations)}} +
+{%endblock%} + +{%block sidebarcontents%} +{{display_species_card(species)}} +{%endblock%} -- cgit v1.2.3