about summary refs log tree commit diff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rw-r--r--scripts/run_qtlreaper.py35
1 files changed, 24 insertions, 11 deletions
diff --git a/scripts/run_qtlreaper.py b/scripts/run_qtlreaper.py
index 7d58402..ab19da0 100644
--- a/scripts/run_qtlreaper.py
+++ b/scripts/run_qtlreaper.py
@@ -1,4 +1,5 @@
 """Script to run rust-qtlreaper and update database with results."""
+import os
 import sys
 import csv
 import time
@@ -152,24 +153,36 @@ def dispatch(args: Namespace) -> int:
                      "--n_permutations", "1000",
                      "--geno", _genofile,
                      "--traits", _traitsfile,
-                     "--main_output", _qtlreaper_main_output)) as _qtlreaper:
+                     "--main_output", _qtlreaper_main_output),
+                    env=({**os.environ, "RUST_BACKTRACE": "full"}
+                         if logger.getEffectiveLevel() == logging.DEBUG
+                         else dict(os.environ))) as _qtlreaper:
                 while _qtlreaper.poll() is None:
                     logger.debug("QTLReaper process running…")
                     time.sleep(1)
-                    results = tuple(#type: ignore[var-annotated]
-                        max(qtls, key=lambda qtl: qtl["LRS"])
-                        for qtls in
-                        reduce(__qtls_by_trait__,
-                               parse_tsv_file(_qtlreaper_main_output),
-                               {}).values())
-            save_qtl_values_to_db(conn, results)
+                    results = (
+                        tuple(#type: ignore[var-annotated]
+                            max(qtls, key=lambda qtl: qtl["LRS"])
+                            for qtls in
+                            reduce(__qtls_by_trait__,
+                                   parse_tsv_file(_qtlreaper_main_output),
+                                   {}).values())
+                        if _qtlreaper_main_output.exists()
+                        else tuple())
             logger.debug("Cleaning up temporary files.")
-            _traitsfile.unlink()
-            _qtlreaper_main_output.unlink()
+
+            # short-circuits to delete file if exists
+            _traitsfile.exists() and _traitsfile.unlink()
+            _qtlreaper_main_output.exists() and _qtlreaper_main_output.unlink()
+
+            if _qtlreaper.returncode != 0:
+                return _qtlreaper.returncode
+
+            save_qtl_values_to_db(conn, results)
             logger.info("Successfully computed p values for %s traits.", len(_traitsdata))
             return 0
         except FileNotFoundError as fnf:
-            logger.error(", ".join(fnf.args), exc_info=False)
+            logger.error(", ".join(str(arg) for arg in fnf.args), exc_info=False)
         except AssertionError as aserr:
             logger.error(", ".join(aserr.args), exc_info=False)
         except Exception as _exc:# pylint: disable=[broad-exception-caught]