def _normalize_exclusive_arguments()

in nubia/internal/typing/__init__.py [0:0]


def _normalize_exclusive_arguments(exclusive_arguments):
    """
    Guarantees that exclusive arguments is normalized to a tuple of tuples
    or None in case exclusive_arguments is empty
    """

    def all_string_items(items):
        return all(isinstance(item, str) for item in items)

    def all_container_items(items):
        return all(
            isinstance(item, Container) and not isinstance(item, str) for item in items
        )

    if not exclusive_arguments:
        return None

    if all_string_items(exclusive_arguments):
        return (tuple(exclusive_arguments),)

    is_container_of_container_of_strings = all_container_items(
        exclusive_arguments
    ) and all(all_string_items(item) for item in exclusive_arguments)

    if not is_container_of_container_of_strings:
        raise ValueError(
            "exclusive_arguments is not an array of "
            "strings or an array of arrays of strings"
        )

    return tuple(tuple(group) for group in exclusive_arguments)