"""The endpoints for the platforms""" from flask import ( flash, request, url_for, redirect, Blueprint, current_app as app) from uploader.ui import make_template_renderer 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.datautils import safe_int, order_by_family, enumerate_sequence from .models import platforms_by_species, species_platforms_count platformsbp = Blueprint("platforms", __name__) render_template = make_template_renderer("platforms") @platformsbp.route("platforms", methods=["GET"]) @require_login def index(): """Entry-point to the platforms feature.""" with database_connection(app.config["SQL_URI"]) as conn: if not bool(request.args.get("species_id")): return render_template( "platforms/index.html", species=order_by_family(all_species(conn)), activelink="platforms") species = species_by_id(conn, request.args["species_id"]) if not bool(species): flash("No species selected.", "alert-danger") return redirect(url_for("species.platforms.index")) return redirect(url_for("species.platforms.list_platforms", species_id=species["SpeciesId"])) @platformsbp.route("/platforms", methods=["GET"]) @require_login def list_platforms(species_id: int): """List all the available genetic sequencing platforms.""" with database_connection(app.config["SQL_URI"]) as conn: species = species_by_id(conn, species_id) if not bool(species): flash("No species provided.", "alert-danger") return redirect(url_for("species.platforms.index")) start_from = max(safe_int(request.args.get("start_from") or 0), 0) count = safe_int(request.args.get("count") or 20) return render_template( "platforms/list-platforms.html", species=species, platforms=enumerate_sequence( platforms_by_species(conn, species_id, offset=start_from, limit=count), start=start_from+1), start_from=start_from, count=count, total_platforms=species_platforms_count(conn, species_id), activelink="list-platforms") @platformsbp.route("/platforms/create", methods=["GET", "POST"]) @require_login def create_platform(species_id: int): """Create a new genetic sequencing platform.""" with database_connection(app.config["SQL_URI"]) as conn: species = species_by_id(conn, species_id) if not bool(species): flash("No species provided.", "alert-danger") return redirect(url_for("species.platforms.index")) if request.method == "GET": return render_template( "platforms/create-platform.html", species=species, activelink="create-platform") raise NotImplementedError("This still needs to be implemented.")