From f78c6a9f3d03e347693a2f64444ea13bcc0ae5c7 Mon Sep 17 00:00:00 2001
From: Cyril Danilevski <cydanil@gmail.com>
Date: Fri, 28 May 2021 17:30:00 +0200
Subject: [PATCH] Clean webservice.run_action returns

This change is motivated by wanting to log sim mode job "submissions"
---
 webservice/webservice.py | 57 ++++++++++++++++++----------------------
 1 file changed, 25 insertions(+), 32 deletions(-)

diff --git a/webservice/webservice.py b/webservice/webservice.py
index 2d2e7f59b..991acbf3d 100644
--- a/webservice/webservice.py
+++ b/webservice/webservice.py
@@ -452,7 +452,7 @@ async def copy_untouched_files(file_list, out_folder, run):
 
 
 async def run_action(job_db, cmd, mode, proposal, run, rid) -> str:
-    """ Run action command (CORRECT OR DARK)
+    """Run action command (CORRECT or DARK).
 
     :param job_db: jobs database
     :param cmd: to run, should be a in list for as expected by subprocess.run
@@ -465,48 +465,41 @@ async def run_action(job_db, cmd, mode, proposal, run, rid) -> str:
     Returns a formatted Success or Error message indicating outcome of the
     execution.
     """
-    # FIXME: this coro has too many returns that can be simplified
     if mode == "prod":
         logging.info(" ".join(cmd))
         retcode, stdout = await run_proc_async(cmd)
-        if retcode == 0:
-            if "DARK" in cmd:
-                logging.info(Success.START_CHAR.format(proposal, run))
-            else:
-                logging.info(Success.START_CORRECTION.format(proposal, run))
-            # enter jobs in job db
-            c = job_db.cursor()  # FIXME: asyncio
-            rstr = stdout.decode()
-
-            for r in rstr.split("\n"):
-                if "Submitted job:" in r:
-                    _, jobid = r.split(":")
-                    c.execute(
-                        "INSERT INTO jobs VALUES (?, ?, ?, ?, 'PD', ?, ?, ?)",
-                        (rid, jobid.strip(), proposal, run,
-                         datetime.now().isoformat(), cmd[3], cmd[4])
-                    )
-            job_db.commit()
-            logging.debug((" ".join(cmd)).replace(',', '').replace("'", ""))
-            if "DARK" in cmd:
-                return Success.START_CHAR.format(proposal, run)
-            else:
-                return Success.START_CORRECTION.format(proposal, run)
-        else:
+        if retcode != 0:
             logging.error(Errors.JOB_LAUNCH_FAILED.format(cmd, retcode))
             return Errors.JOB_LAUNCH_FAILED.format(cmd, retcode)
 
-    else:
         if "DARK" in cmd:
-            logging.debug(Success.START_CHAR_SIM.format(proposal, run))
+            message = Success.START_CHAR.format(proposal, run)
         else:
-            logging.debug(Success.START_CORRECTION_SIM.format(proposal, run))
+            message = Success.START_CORRECTION.format(proposal, run)
+
+        # Save submitted jobs to persistent database.
+        c = job_db.cursor()  # FIXME: asyncio
+        rstr = stdout.decode()
+
+        for r in rstr.split("\n"):
+            if "Submitted job:" in r:
+                _, jobid = r.split(":")
+                c.execute(
+                    "INSERT INTO jobs VALUES (?, ?, ?, ?, 'PD', ?, ?, ?)",
+                    (rid, jobid.strip(), proposal, run,
+                     datetime.now().isoformat(), cmd[3], cmd[4])
+                )
+        job_db.commit()
 
-        logging.debug((" ".join(cmd)).replace(',', '').replace("'", ""))
+    else:  # mode == "sim"
         if "DARK" in cmd:
-            return Success.START_CHAR_SIM.format(proposal, run)
+            message = Success.START_CHAR_SIM.format(proposal, run)
         else:
-            return Success.START_CORRECTION_SIM.format(proposal, run)
+            message = Success.START_CORRECTION_SIM.format(proposal, run)
+
+    logging.info(message)
+    logging.info((" ".join(cmd)).replace(',', '').replace("'", ""))
+    return message
 
 
 async def wait_on_transfer(rpath, max_tries=300) -> bool:
-- 
GitLab