aboutsummaryrefslogtreecommitdiff
path: root/quality_control/headers.py
diff options
context:
space:
mode:
authorFrederick Muriuki Muriithi2024-02-20 10:57:56 +0300
committerFrederick Muriuki Muriithi2024-02-20 10:57:56 +0300
commitce243a57b24d6adecb169487e706290d91b22d19 (patch)
tree6b0b06a444c16ffb8be1c65fa4e5b78ced6a0615 /quality_control/headers.py
parenta4324cd24b5a14fbcf19a6e04d2b76fb2838038e (diff)
downloadgn-uploader-ce243a57b24d6adecb169487e706290d91b22d19.tar.gz
Track filename in the errors
R/qtl2 bundles can contain more than one file, of the same type. When errors are encountered in any of the files, we need to be able to inform the user which file it is, in addition to the line and column number.
Diffstat (limited to 'quality_control/headers.py')
-rw-r--r--quality_control/headers.py24
1 files changed, 14 insertions, 10 deletions
diff --git a/quality_control/headers.py b/quality_control/headers.py
index f4f4dad..436ea5a 100644
--- a/quality_control/headers.py
+++ b/quality_control/headers.py
@@ -5,30 +5,34 @@ from typing import Union, Tuple, Sequence
from quality_control.errors import InvalidValue, DuplicateHeading
-def invalid_header(
- line_number: int, headers: Sequence[str]) -> Union[InvalidValue, None]:
+def invalid_header(filename: str,
+ line_number: int,
+ headers: Sequence[str]) -> Union[InvalidValue, None]:
"""Return an `InvalidValue` object if the header row has less than 2
items."""
if len(headers) < 2:
return InvalidValue(
- line_number, 0, "<TAB>".join(headers),
+ filename, line_number, 0, "<TAB>".join(headers),
"The header MUST contain at least 2 columns")
return None
def invalid_headings(
- line_number: int, strains: Sequence[str],
+ filename: str, line_number: int, strains: Sequence[str],
headings: Sequence[str]) -> Union[Tuple[InvalidValue, ...], None]:
"""Return tuple of `InvalidValue` objects for each error found for every
column heading."""
return tuple(
- InvalidValue(
- line_number, col, header, f"'{header}' not a valid strain.")
+ InvalidValue(filename,
+ line_number,
+ col,
+ header,
+ f"'{header}' not a valid strain.")
for col, header in
enumerate(headings, start=2) if header not in strains)
-def duplicate_headings(
- line_number: int,
- headers: Sequence[str]) -> Tuple[DuplicateHeading, ...]:
+def duplicate_headings(filename: str,
+ line_number: int,
+ headers: Sequence[str]) -> Tuple[DuplicateHeading, ...]:
"""Return a tuple of `DuplicateHeading` objects for each column heading that
is a duplicate of another column heading."""
def __update_columns__(acc, item):
@@ -42,7 +46,7 @@ def duplicate_headings(
}
return tuple(
DuplicateHeading(
- line_number, columns, heading, (
+ filename, line_number, columns, heading, (
f"Heading '{heading}', is repeated in columns "
f"{','.join(str(i) for i in columns)}"))
for heading, columns in repeated.items())