Package typing_validation

Runtime typing validation.

The core functionality of this library is provided by the validate function:

>>> from typing_validation import validate

The validate function is invoked with a value and a type as its arguments and it returns nothing when the given value is valid for the given type:

>>> validate(12, int)
# nothing is returned => 12 is a valid int

If the value is invalid for the given type, the validate function raises a TypeError:

>>> validate(12, str)
TypeError: For type <class 'str'>, invalid value: 12

For nested types (e.g. parametric collection/mapping types), the full chain of validation failures is shown by the type error:

>>> validate([0, 1, "hi"], list[int])
TypeError: For type list[int], invalid value: [0, 1, 'hi']
  For type <class 'int'>, invalid value: 'hi'

For union types, detailed validation failures are shown for individual union member types, where available:

>>> from typing import *
>>> validate([[0, 1, 2], {"hi": 0}], list[Union[Collection[int], dict[str, str]]])
TypeError: For type list[typing.Union[typing.Collection[int], dict[str, str]]],
invalid value: [[0, 1, 2], {'hi': 0}]
  For type typing.Union[typing.Collection[int], dict[str, str]], invalid value: {'hi': 0}
    Detailed failures for member type typing.Collection[int]:
      For type <class 'int'>, invalid value: 'hi'
    Detailed failures for member type dict[str, str]:
      For type <class 'str'>, invalid value: 0

Note. Traceback information was hidden in the above examples, for clarity:

Python 3.9.7
>>> import sys
>>> sys.tracebacklimit = 0
Expand source code
"""
    Runtime typing validation.

    The core functionality of this library is provided by the `validate` function:

    ```py
    >>> from typing_validation import validate
    ```

    The `validate` function is invoked with a value and a type as its arguments and
    it returns nothing when the given value is valid for the given type:

    ```py
    >>> validate(12, int)
    # nothing is returned => 12 is a valid int
    ```

    If the value is invalid for the given type, the `validate` function raises a `TypeError`:

    ```py
    >>> validate(12, str)
    TypeError: For type <class 'str'>, invalid value: 12
    ```

    For nested types (e.g. parametric collection/mapping types), the full chain of validation
    failures is shown by the type error:

    ```py
    >>> validate([0, 1, "hi"], list[int])
    TypeError: For type list[int], invalid value: [0, 1, 'hi']
      For type <class 'int'>, invalid value: 'hi'
    ```

    For union types, detailed validation failures are shown for individual union member types, where available:

    ```py
    >>> from typing import *
    >>> validate([[0, 1, 2], {"hi": 0}], list[Union[Collection[int], dict[str, str]]])
    TypeError: For type list[typing.Union[typing.Collection[int], dict[str, str]]],
    invalid value: [[0, 1, 2], {'hi': 0}]
      For type typing.Union[typing.Collection[int], dict[str, str]], invalid value: {'hi': 0}
        Detailed failures for member type typing.Collection[int]:
          For type <class 'int'>, invalid value: 'hi'
        Detailed failures for member type dict[str, str]:
          For type <class 'str'>, invalid value: 0
    ```

    **Note.** Traceback information was hidden in the above examples, for clarity:

    ```py
    Python 3.9.7
    >>> import sys
    >>> sys.tracebacklimit = 0
    ```
"""

__version__ = "0.0.1"

from .validation import validate
from .validation_failure import get_validation_failure, latest_validation_failure

# re-export all encodings and functions.
__all__ = [
    "validate",
    "get_validation_failure",
    "latest_validation_failure"
]

# remove members already documented in their originale modules
__pdoc__ = {name: False for name in __all__}

Sub-modules

typing_validation.validation

Type validation function.

typing_validation.validation_failure

Validation failure tracking.