From d904748a0c8c35d937c6e56fadc7ba52b9f43634 Mon Sep 17 00:00:00 2001 From: Frederick Muriuki Muriithi Date: Mon, 8 Apr 2024 09:26:17 +0300 Subject: bug: Handle IntegrityError: Studies cannot have same name. --- qc_app/upload/rqtl2.py | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) (limited to 'qc_app/upload') diff --git a/qc_app/upload/rqtl2.py b/qc_app/upload/rqtl2.py index 860a6a9..e0fb40c 100644 --- a/qc_app/upload/rqtl2.py +++ b/qc_app/upload/rqtl2.py @@ -600,29 +600,37 @@ def select_probeset_dataset(species_id: int, population_id: int): methods=["POST"]) def create_probeset_study(species_id: int, population_id: int): """Create a new probeset study.""" + errorclasses = "alert-error error-rqtl2 error-rqtl2-create-probeset-study" with database_connection(app.config["SQL_URI"]) as conn: def __thunk__(): form = request.form - select_study_page = redirect( - url_for("upload.rqtl2.select_probeset_study", + dataset_info_page = redirect( + url_for("upload.rqtl2.select_dataset_info", species_id=species_id, population_id=population_id), code=307) if not (bool(form.get("platformid")) and bool(platform_by_id(conn, int(form["platformid"])))): - flash("Invalid platform selected.", "alert-error error-rqtl2") - return select_study_page + flash("Invalid platform selected.", errorclasses) + return dataset_info_page if not (bool(form.get("tissueid")) and bool(tissue_by_id(conn, int(form["tissueid"])))): - flash("Invalid tissue selected.", "alert-error error-rqtl2") - return select_study_page + flash("Invalid tissue selected.", errorclasses) + return dataset_info_page - study = probeset_create_study( - conn, population_id, int(form["platformid"]), int(form["tissueid"]), - form["studyname"], form.get("studyfullname") or "", - form.get("studyshortname") or "") + studyname = form["studyname"] + try: + study = probeset_create_study( + conn, population_id, int(form["platformid"]), int(form["tissueid"]), + studyname, form.get("studyfullname") or "", + form.get("studyshortname") or "") + except mdb.IntegrityError as _ierr: + flash(f"ProbeSet study with name '{escape(studyname)}' already " + "exists.", + errorclasses) + return dataset_info_page return render_template( "rqtl2/create-probe-study-success.html", species=species_by_id(conn, species_id), -- cgit v1.2.3