aboutsummaryrefslogtreecommitdiff
path: root/r_qtl
diff options
context:
space:
mode:
Diffstat (limited to 'r_qtl')
-rw-r--r--r_qtl/errors.py6
-rw-r--r--r_qtl/r_qtl2.py22
-rw-r--r--r_qtl/r_qtl2_qc.py9
3 files changed, 15 insertions, 22 deletions
diff --git a/r_qtl/errors.py b/r_qtl/errors.py
index 20c5ced..417eb58 100644
--- a/r_qtl/errors.py
+++ b/r_qtl/errors.py
@@ -5,3 +5,9 @@ class RQTLError(Exception):
class InvalidFormat(RQTLError):
"""Raised when the format of the file(s) is invalid."""
+
+class MissingFileError(InvalidFormat):
+ """
+ Raise when at least one file listed in the control file is missing from the
+ R/qtl2 bundle.
+ """
diff --git a/r_qtl/r_qtl2.py b/r_qtl/r_qtl2.py
index c2828d2..f8c08d9 100644
--- a/r_qtl/r_qtl2.py
+++ b/r_qtl/r_qtl2.py
@@ -288,28 +288,6 @@ def sex_information(zfile: ZipFile, cdata: dict) -> Iterator[dict]:
key: chain(value, partial(replace_sex_info, cdata=cdata))
for key, value in row.items() if key not in ci_fields}
-def validate_bundle(zfile: ZipFile):
- """Ensure the R/qtl2 bundle is valid."""
- cdata = control_data(zfile)
- def __member_exists_p__(zfile, member):
- if isinstance(member, str):
- zfile.getinfo(member)
- else:
- for inner in member:
- zfile.getinfo(inner)
-
- try:
- for member in (key for key in cdata.keys() if key in __FILE_TYPES__):
- __member_exists_p__(zfile, cdata[member])
-
- if "file" in cdata.get("sex", {}):
- __member_exists_p__(zfile, cdata["sex"]["file"])
-
- if "file" in cdata.get("cross_info", {}):
- __member_exists_p__(zfile, cdata["cross_info"]["file"])
- except KeyError as kerr:
- raise InvalidFormat(*kerr.args) from kerr
-
def genotype_data(zfile: ZipFile):
"""Convenience function to genotype data from R/qtl2 bundle."""
cdata = control_data(zfile)
diff --git a/r_qtl/r_qtl2_qc.py b/r_qtl/r_qtl2_qc.py
index f666f40..261d300 100644
--- a/r_qtl/r_qtl2_qc.py
+++ b/r_qtl/r_qtl2_qc.py
@@ -3,6 +3,7 @@ from zipfile import ZipFile
from functools import reduce
from typing import Union, Sequence
+from r_qtl import errors as rqe
from r_qtl import r_qtl2 as rqtl2
from r_qtl.r_qtl2 import __FILE_TYPES__
@@ -45,3 +46,11 @@ def missing_files(zfile: ZipFile) -> tuple[str]:
return tuple(filter(__missing_p__,
bundle_files_list(zfile, rqtl2.control_data(zfile))))
+
+def validate_bundle(zfile: ZipFile):
+ """Ensure the R/qtl2 bundle is valid."""
+ missing = missing_files(zfile)
+ if len(missing) > 0:
+ raise rqe.MissingFileError(
+ "The following files do not exist in the bundle: " +
+ ", ".join(missing))