aboutsummaryrefslogtreecommitdiff
path: root/uploader/phenotypes/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'uploader/phenotypes/views.py')
-rw-r--r--uploader/phenotypes/views.py47
1 files changed, 37 insertions, 10 deletions
diff --git a/uploader/phenotypes/views.py b/uploader/phenotypes/views.py
index 88cb89c..4565844 100644
--- a/uploader/phenotypes/views.py
+++ b/uploader/phenotypes/views.py
@@ -1,20 +1,24 @@
"""Views handling ('classical') phenotypes."""
-from flask import (request,
+from flask import (flash,
+ 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.datautils import safe_int, order_by_family, enumerate_sequence
from uploader.population.models import (populations_by_species,
population_by_species_and_id)
-from .models import datasets_by_population, phenotypes_data
+from .models import (dataset_by_id,
+ phenotypes_count,
+ dataset_phenotypes,
+ datasets_by_population)
phenotypesbp = Blueprint("phenotypes", __name__)
@@ -40,7 +44,7 @@ def index():
methods=["GET"])
@require_login
@with_species(redirect_uri="species.populations.phenotypes.index")
-def select_population(species: dict, **kwargs):
+def select_population(species: dict, **kwargs):# pylint: disable=[unused-argument]
"""Select the population for your phenotypes."""
with database_connection(app.config["SQL_URI"]) as conn:
if not bool(request.args.get("population_id")):
@@ -58,7 +62,7 @@ def select_population(species: dict, **kwargs):
flash("No such population found!", "alert-danger")
return redirect(url_for(
"species.populations.phenotypes.select_population",
- species_id=species_id))
+ species_id=species["SpeciesId"]))
return redirect(url_for("species.populations.phenotypes.list_datasets",
species_id=species["SpeciesId"],
@@ -72,7 +76,7 @@ def select_population(species: dict, **kwargs):
@require_login
@with_population(species_redirect_uri="species.populations.phenotypes.index",
redirect_uri="species.populations.phenotypes.select_population")
-def list_datasets(species: int, population: int, **kwargs):
+def list_datasets(species: dict, population: dict, **kwargs):# pylint: disable=[unused-argument]
"""List available phenotype datasets."""
with database_connection(app.config["SQL_URI"]) as conn:
return render_template("phenotypes/list-datasets.html",
@@ -92,9 +96,32 @@ def list_datasets(species: int, population: int, **kwargs):
@require_login
@with_population(species_redirect_uri="species.populations.phenotypes.index",
redirect_uri="species.populations.phenotypes.select_population")
-def view_dataset(species: int, population: int, dataset_id: int, **kwargs):
+def view_dataset(# pylint: disable=[unused-argument]
+ species: dict, population: dict, dataset_id: int, **kwargs):
"""View a specific dataset"""
with database_connection(app.config["SQL_URI"]) as conn:
- from flask import jsonify
- return jsonify(phenotypes_data(
- conn, population["Id"], dataset_id, offset=0, limit=20))
+ dataset = dataset_by_id(
+ conn, species["SpeciesId"], population["Id"], dataset_id)
+ if not bool(dataset):
+ flash("Could not find such a phenotype dataset!", "alert-danger")
+ return redirect(url_for(
+ "species.populations.phenotypes.list_datasets",
+ species_id=species["SpeciesId"],
+ population_id=population["Id"]))
+
+ start_at = max(safe_int(request.args.get("start_at") or 0), 0)
+ count = int(request.args.get("count") or 20)
+ return render_template("phenotypes/view-dataset.html",
+ species=species,
+ population=population,
+ dataset={"Id": dataset_id},
+ phenotype_count=phenotypes_count(
+ conn, population["Id"], dataset_id),
+ phenotypes=enumerate_sequence(
+ dataset_phenotypes(conn,
+ population["Id"],
+ dataset_id,
+ offset=start_at,
+ limit=count),
+ start=start_at+1),
+ activelink="view-dataset")