aboutsummaryrefslogtreecommitdiff
path: root/uploader/platforms/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'uploader/platforms/views.py')
-rw-r--r--uploader/platforms/views.py46
1 files changed, 43 insertions, 3 deletions
diff --git a/uploader/platforms/views.py b/uploader/platforms/views.py
index 1abf52e..1030b6c 100644
--- a/uploader/platforms/views.py
+++ b/uploader/platforms/views.py
@@ -1,4 +1,5 @@
"""The endpoints for the platforms"""
+from MySQLdb.cursors import DictCursor
from flask import (
flash,
request,
@@ -13,7 +14,10 @@ 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
+from .models import (save_new_platform,
+ platforms_by_species,
+ species_platforms_count,
+ platform_by_species_and_id)
platformsbp = Blueprint("platforms", __name__)
render_template = make_template_renderer("platforms")
@@ -69,7 +73,8 @@ def list_platforms(species_id: int):
@require_login
def create_platform(species_id: int):
"""Create a new genetic sequencing platform."""
- with database_connection(app.config["SQL_URI"]) as conn:
+ with (database_connection(app.config["SQL_URI"]) as conn,
+ conn.cursor(cursorclass=DictCursor) as cursor):
species = species_by_id(conn, species_id)
if not bool(species):
flash("No species provided.", "alert-danger")
@@ -81,4 +86,39 @@ def create_platform(species_id: int):
species=species,
activelink="create-platform")
- raise NotImplementedError("This still needs to be implemented.")
+ try:
+ form = request.form
+ new_platform = save_new_platform(
+ cursor,
+ species_id,
+ form["geo-platform"],
+ form["platform-name"],
+ form["platform-shortname"],
+ form["platform-title"],
+ form.get("go-tree-value") or None)
+ except KeyError as _kerr:
+ flash(f"Required value for field {_kerr.args[0]} was not provided.",
+ "alert-danger")
+ return redirect(url_for("species.platforms.create_platform",
+ species_id=species_id))
+ except AssertionError as _aerr:
+ flash(f"Platform with GeoPlatform value of '{form['geo-platform']}'"
+ f" already existst for species '{species['FullName']}'.",
+ "alert-danger")
+ return redirect(url_for("species.platforms.create_platform",
+ species_id=species_id))
+
+ flash("Platform created successfully", "alert-success")
+ return redirect(url_for("species.platforms.view_platform",
+ species_id=species_id,
+ platform_id=new_platform["Id"]))
+
+
+@platformsbp.route("<int:species_id>/platforms/<int:platform_id>/view",
+ methods=["GET"])
+@require_login
+def view_platform(species_id: int, platform_id: int):
+ """View details for a specific platform."""
+ with database_connection(app.config["SQL_URI"]) as conn:
+ return platform_by_species_and_id(
+ conn, species_id, platform_id)