From 1c4286ec769bdea47c7950b905d78232366af1fe Mon Sep 17 00:00:00 2001 From: Pjotr Prins Date: Sun, 24 Mar 2024 09:36:33 +0100 Subject: Change behavior of do_paths_exist to actually throw useful error --- gn3/api/gemma.py | 26 +++++++++----------------- gn3/api/rqtl.py | 5 ++--- gn3/computations/gemma.py | 10 +++++++--- 3 files changed, 18 insertions(+), 23 deletions(-) (limited to 'gn3') diff --git a/gn3/api/gemma.py b/gn3/api/gemma.py index 6b0b20e..c862d91 100644 --- a/gn3/api/gemma.py +++ b/gn3/api/gemma.py @@ -12,7 +12,7 @@ from gn3.commands import run_cmd from gn3.fs_helpers import cache_ipfs_file from gn3.fs_helpers import jsonfile_to_dict from gn3.computations.gemma import generate_gemma_cmd -from gn3.computations.gemma import do_paths_exist +from gn3.computations.gemma import assert_paths_exist gemma = Blueprint("gemma", __name__) @@ -55,8 +55,7 @@ traitfile, and snpsfile are extracted from a metadata.json file. genofile = cache_ipfs_file( ipfs_file=_dict.get("geno"), cache_dir=current_app.config.get('CACHEDIR')) - if not do_paths_exist([genofile, phenofile, snpsfile]): - raise FileNotFoundError + assert_paths_exist([genofile, phenofile, snpsfile]) gemma_kwargs = {"g": genofile, "p": phenofile, "a": snpsfile} results = generate_gemma_cmd( gemma_cmd=current_app.config.get("GEMMA_" @@ -97,8 +96,7 @@ values. ipfs_file=_dict.get("geno"), cache_dir=current_app.config.get('CACHEDIR') ) - if not do_paths_exist([genofile, phenofile, snpsfile]): - raise FileNotFoundError + assert_paths_exist([genofile, phenofile, snpsfile]) gemma_kwargs = {"g": genofile, "p": phenofile, "a": snpsfile} results = generate_gemma_cmd( gemma_cmd=current_app.config.get("GEMMA_" @@ -235,8 +233,7 @@ def compute_gwa_with_loco_maf(k_filename, maf, token): ipfs_file=_dict.get("geno"), cache_dir=current_app.config.get('CACHEDIR') ) - if not do_paths_exist([genofile, phenofile, snpsfile]): - raise FileNotFoundError + assert_paths_exist([genofile, phenofile, snpsfile]) gemma_kwargs = { "g": genofile, "p": phenofile, @@ -286,8 +283,7 @@ def compute_gwa_with_loco_covar(k_filename, maf, token): ipfs_file=_dict.get("geno"), cache_dir=current_app.config.get('CACHEDIR') ) - if not do_paths_exist([genofile, phenofile, snpsfile, covarfile]): - raise FileNotFoundError + assert_paths_exist([genofile, phenofile, snpsfile, covarfile]) gemma_kwargs = { "g": genofile, "p": phenofile, @@ -340,8 +336,7 @@ covars; lmm defaults to 9! ipfs_file=_dict.get("geno"), cache_dir=current_app.config.get('CACHEDIR') ) - if not do_paths_exist([genofile, phenofile, snpsfile]): - raise FileNotFoundError + assert_paths_exist([genofile, phenofile, snpsfile]) gemma_kwargs = {"g": genofile, "p": phenofile, "a": snpsfile} gemma_k_cmd = generate_gemma_cmd( gemma_cmd=current_app.config.get("GEMMA_" @@ -396,8 +391,7 @@ covars; lmm defaults to 9! ipfs_file=_dict.get("geno"), cache_dir=current_app.config.get('CACHEDIR') ) - if not do_paths_exist([genofile, phenofile, snpsfile]): - raise FileNotFoundError + assert_paths_exist([genofile, phenofile, snpsfile]) gemma_kwargs = {"g": genofile, "p": phenofile, "a": snpsfile} gemma_k_cmd = generate_gemma_cmd( gemma_cmd=current_app.config.get("GEMMA_" @@ -451,8 +445,7 @@ def compute_k_gwa_with_loco_only(chromosomes, maf, token): ipfs_file=_dict.get("geno"), cache_dir=current_app.config.get('CACHEDIR') ) - if not do_paths_exist([genofile, phenofile, snpsfile]): - raise FileNotFoundError + assert_paths_exist([genofile, phenofile, snpsfile]) gemma_kwargs = {"g": genofile, "p": phenofile, "a": snpsfile} gemma_k_cmd = generate_gemma_cmd( gemma_cmd=current_app.config.get("GEMMA_" @@ -509,8 +502,7 @@ def compute_k_gwa_with_loco_and_cavar(chromosomes, maf, token): ipfs_file=_dict.get("geno"), cache_dir=current_app.config.get('CACHEDIR') ) - if not do_paths_exist([genofile, phenofile, snpsfile]): - raise FileNotFoundError + assert_paths_exist([genofile, phenofile, snpsfile]) gemma_kwargs = {"g": genofile, "p": phenofile, "a": snpsfile} gemma_k_cmd = generate_gemma_cmd( gemma_cmd=current_app.config.get("GEMMA_" diff --git a/gn3/api/rqtl.py b/gn3/api/rqtl.py index ae0110d..bfb191e 100644 --- a/gn3/api/rqtl.py +++ b/gn3/api/rqtl.py @@ -8,7 +8,7 @@ from flask import request from gn3.computations.rqtl import generate_rqtl_cmd, process_rqtl_mapping, \ process_rqtl_pairscan, process_perm_output -from gn3.computations.gemma import do_paths_exist +from gn3.computations.gemma import assert_paths_exist rqtl = Blueprint("rqtl", __name__) @@ -21,8 +21,7 @@ run the rqtl_wrapper script and return the results as JSON genofile = request.form['geno_file'] phenofile = request.form['pheno_file'] - if not do_paths_exist([genofile, phenofile]): - raise FileNotFoundError + assert_paths_exist([genofile, phenofile]) # Split kwargs by those with values and boolean ones that just convert to True/False kwargs = ["covarstruct", "model", "method", "nperm", "scale", "control"] diff --git a/gn3/computations/gemma.py b/gn3/computations/gemma.py index 03e1a76..5a2616b 100644 --- a/gn3/computations/gemma.py +++ b/gn3/computations/gemma.py @@ -1,4 +1,5 @@ """Procedures related gemma computations""" +import errno import os from base64 import b64encode @@ -40,11 +41,14 @@ def generate_pheno_txt_file(trait_filename: str, return f"{tmpdir}/gn2/{trait_filename}" -def do_paths_exist(paths: ValuesView) -> bool: - """Given a list of PATHS, return False if any of them do not exist.""" +def assert_paths_exist(paths: ValuesView) -> bool: + """Given a list of PATHS, throw error if any of them do not exist.""" for path in paths: if not os.path.isfile(path): - return False + if throw_error: + raise FileNotFoundError(errno.ENOENT, os.strerror(errno.ENOENT), path) + else: + return False return True -- cgit v1.2.3