Warning

This document is for an old release 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}]", )