Warning
This document is for an in-development version of Galaxy. You can alternatively view this page in the latest release if it exists or view the top of the latest release's documentation.
Source code for galaxy.tool_util.verify.asserts.tabular
import re
from ._types import (
Annotated,
AssertionParameter,
Delta,
Max,
Min,
N,
Negate,
NEGATE_DEFAULT,
Output,
)
from ._util import _assert_number
Sep = Annotated[str, AssertionParameter("Separator defining columns, default: tab")]
Comment = Annotated[
str,
AssertionParameter(
"Comment character(s) used to skip comment lines (which should not be used for counting columns)"
),
]
[docs]def get_first_line(output: str, comment: str) -> str:
"""
get the first non-comment and non-empty line
"""
if comment != "":
match = re.search(f"^([^{comment}].*)$", output, flags=re.MULTILINE)
else:
match = re.search("^(.+)$", output, flags=re.MULTILINE)
if match is None:
return ""
else:
return match.group(1)
[docs]def assert_has_n_columns(
output: Output,
n: N = None,
delta: Delta = 0,
min: Min = None,
max: Max = None,
sep: Sep = "\t",
comment: Comment = "",
negate: Negate = NEGATE_DEFAULT,
) -> None:
"""Asserts tabular output contains the specified
number (``n``) of columns.
For instance, ``<has_n_columns n="3"/>``. The assertion tests only the first line.
Number of columns can optionally also be specified with ``delta``. Alternatively the
range of expected occurences can be specified by ``min`` and/or ``max``.
Optionally a column separator (``sep``, default is ``\t``) `and comment character(s)
can be specified (``comment``, default is empty string). The first non-comment
line is used for determining the number of columns.
"""
first_line = get_first_line(output, comment)
n_columns = len(first_line.split(sep))
_assert_number(
n_columns,
n,
delta,
min,
max,
negate,
"{expected} {n}+-{delta} columns in output",
"{expected} the number of columns in output to be in [{min}:{max}]",
)