diff options
Diffstat (limited to 'uploader/platforms/views.py')
-rw-r--r-- | uploader/platforms/views.py | 46 |
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) |