fuzeman/byte

View on GitHub
byte/core/helpers/validate.py

Summary

Maintainability
A
1 hr
Test Coverage
"""byte - validation helpers module."""

from __future__ import absolute_import, division, print_function


def is_list_of(items, value_type):
    """Validate list :code:`items` match :code:`value_type`.

    :param items: Items
    :type items: list

    :param value_type: Value type
    :type value_type: class
    """
    if not isinstance(items, list):
        return False

    def match():
        for item in items:
            if type(value_type) is tuple:
                yield is_tuple_of(item, value_type)
                continue

            yield isinstance(item, value_type)

    return all(match())


def is_tuple_of(items, value_type):
    """Validate tuple :code:`items` match :code:`value_type`.

    :param items: Items
    :type items: tuple

    :param value_type: Value type
    :type value_type: class
    """
    if not isinstance(items, tuple):
        return False

    def match():
        if isinstance(value_type, (list, tuple)):
            yield len(items) == len(value_type)

        for x, item in enumerate(items):
            if type(value_type) is tuple:
                yield isinstance(item, value_type[x])
                continue

            yield isinstance(item, value_type)

    return all(match())