From 7ff588bc94278b30d87ebded26a50eb71f8b315e Mon Sep 17 00:00:00 2001
From: Frederick Muriuki Muriithi
Date: Mon, 7 Oct 2024 16:02:16 -0500
Subject: Reuse requests checks to fix "too many returns" linting error

---
 uploader/samples/views.py | 73 +++++++++++++++++++----------------------------
 1 file changed, 29 insertions(+), 44 deletions(-)

(limited to 'uploader')

diff --git a/uploader/samples/views.py b/uploader/samples/views.py
index b8ec4d4..ed79101 100644
--- a/uploader/samples/views.py
+++ b/uploader/samples/views.py
@@ -16,6 +16,7 @@ from uploader import jobs
 from uploader.files import save_file
 from uploader.ui import make_template_renderer
 from uploader.authorisation import require_login
+from uploader.request_checks import with_population
 from uploader.input_validation import is_integer_input
 from uploader.datautils import safe_int, order_by_family, enumerate_sequence
 from uploader.population.models import population_by_id, populations_by_species
@@ -25,10 +26,6 @@ from uploader.db_utils import (with_db_connection,
 from uploader.species.models import (all_species,
                                      species_by_id,
                                      order_species_by_family)
-from uploader.population.models import(save_population,
-                                       population_by_id,
-                                       populations_by_species,
-                                       population_by_species_and_id)
 
 from .models import samples_by_species_and_population
 
@@ -228,53 +225,41 @@ def upload_samples(species_id: int, population_id: int):#pylint: disable=[too-ma
                  "upload-samples/status/<uuid:job_id>",
                  methods=["GET"])
 @require_login
-def upload_status(species_id: int, population_id: int, job_id: uuid.UUID):
+@with_population(species_redirect_uri="species.populations.samples.index",
+                 redirect_uri="species.populations.samples.select_population")
+def upload_status(species: dict, population: dict, job_id: uuid.UUID, **kwargs):# pylint: disable=[unused-argument]
     """Check on the status of a samples upload job."""
-    with database_connection(app.config["SQL_URI"]) as conn:
-        species = species_by_id(conn, species_id)
-        if not bool(species):
-            flash("You must provide a valid species.", "alert-danger")
-            return redirect(url_for("species.populations.samples.index"))
+    job = with_redis_connection(lambda rconn: jobs.job(
+        rconn, jobs.jobsnamespace(), job_id))
+    if job:
+        status = job["status"]
+        if status == "success":
+            return render_template("samples/upload-success.html",
+                                   job=job,
+                                   species=species,
+                                   population=population,)
 
-        population = population_by_species_and_id(
-            conn, species_id, population_id)
-        if not bool(population):
-            flash("You must provide a valid population.", "alert-danger")
+        if status == "error":
             return redirect(url_for(
-                "species.populations.samples.select_population",
-                species_id=species_id))
+                "species.populations.samples.upload_failure", job_id=job_id))
 
-        job = with_redis_connection(lambda rconn: jobs.job(
-            rconn, jobs.jobsnamespace(), job_id))
-        if job:
-            status = job["status"]
-            if status == "success":
-                return render_template("samples/upload-success.html",
-                                       job=job,
-                                       species=species,
-                                       population=population,)
-
-            if status == "error":
+        error_filename = Path(jobs.error_filename(
+            job_id, f"{app.config['UPLOAD_FOLDER']}/job_errors"))
+        if error_filename.exists():
+            stat = os.stat(error_filename)
+            if stat.st_size > 0:
                 return redirect(url_for(
-                    "species.populations.samples.upload_failure", job_id=job_id))
+                    "samples.upload_failure", job_id=job_id))
 
-            error_filename = Path(jobs.error_filename(
-                job_id, f"{app.config['UPLOAD_FOLDER']}/job_errors"))
-            if error_filename.exists():
-                stat = os.stat(error_filename)
-                if stat.st_size > 0:
-                    return redirect(url_for(
-                        "samples.upload_failure", job_id=job_id))
-
-            return render_template("samples/upload-progress.html",
-                                   species=species,
-                                   population=population,
-                                   job=job) # maybe also handle this?
-
-        return render_template("no_such_job.html",
-                               job_id=job_id,
+        return render_template("samples/upload-progress.html",
                                species=species,
-                               population=population), 400
+                               population=population,
+                               job=job) # maybe also handle this?
+
+    return render_template("no_such_job.html",
+                           job_id=job_id,
+                           species=species,
+                           population=population), 400
 
 @samplesbp.route("/upload/failure/<uuid:job_id>", methods=["GET"])
 @require_login
-- 
cgit v1.2.3