Skip to main content

Build Status

A simple Python library containing functions that check Python values. It is intended to make it easy to verify commonly expected pre-conditions on arguments to functions.

Originally developed and open-sourced at Joivy Ltd.

Installation

The validation library is available on PyPI.

It can be installed manually using pip.

$ pip install validation

As this library is a useful tool for cleaning up established codebases, it will continue to support Python 2.7 for the foreseeable future. The string validation functions are particularly handy for sorting out unicode issues in preparation for making the jump to Python 3.

Usage

The validation functions provided by this library are intended to be used at the head of public functions to check their arguments.

from validation import (
    validate_int, validate_float,
    validate_structure,
    validate_text,
)


def function(int_arg, dict_arg, unicode_arg=None):
    """
    A normal function that expects to be called in a particular way.

    :param int int_arg:
        A non-optional integer.  Must be between one and ten.
    :param dict dict_arg:
        A dictionary containing an integer ID, and a floating point amount.
    :param str unicode_arg:
        An optional string.
    """
    validate_int(int_arg, min_value=0, max_value=10)
    validate_structure(dict_arg, schema={
        'id': validate_int(min_value=0)
        'amount': validate_float(),
    })
    validate_text(unicode_argument, required=False)

    # Do something.
    ...

Exceptions raised by the validation functions are allowed to propagate through. Everything is inline, with no separate schema object or function.

Design

What validation does

This library contains a number of functions that will check their first argument if one is provided, or return a closure that can be used later.

Functions check values against a semantic type, not a concrete type. validate_structure and validate_mapping both expect dictionaries, but differ in whether they treat the keys as names or keys. validate_text exists, but we also provide special validators for email addresses and domain names.

Functions are fairly strict by default. validate_float, for example, will reject NaN unless explicitly allowed. On Python 2 validate_text will enforce the use of unicode.

Intended to be mixed with normal Python code to perform more complex validation. As an example, the library provides no tools to assert that to values are mutually exclusive as this requirement is much more clearly expressed with a simple if block.

Basic support for validating simple data-structures is implemented.

What validation does not do

The validation library is not a schema definition language. Validation functions and closures are not designed to be introspectable, and are expected to be used inline.

It is not intended for validating serialized, or partially serialized data. While there is some support for validating structured dictionaries, it does not extend to handling any of the many ways to represent a sum types in json. More complicated data-structures should generally be represented as classes, and validation pushed to the constructors.

Exceptions raised by the validation library are not intended to be caught. We assume that validation failures indicate that the caller is being used incorrectly and that the error and will be interpreted by a programmer and not the machine.

We use built-in exception classes rather than defining custom ones so that libraries that use our functions can allow them to fall through their public interface.

Finally, the validation library does not perform any kind of sanitization. Its purpose is to catch mistakes, not paper over them. Values passed in to the library will never be modified.

License

The project is made available under the terms of the Apache 2.0 license. See LICENSE for details.

Metadata

Release files for validation 0.8.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for validation 0.8.3
File Size Uploaded
validation-0.8.3.tar.gz 28.6 kB Details

Release files / validation-0.8.3.tar.gz

Download URL validation-0.8.3.tar.gz
Size 28.6 kB
Tags Source
SHA-256 checksum
How to use checksums
c4aed7dd548b5ad3ba12306cda7322658490e22dedef29295fdb8692b1b4fe3a
BLAKE2b-256 checksum
How to use checksums
baf70271494d63791033cc993d446f55f86d8c59a45935981b450def3457494e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.9.13

Release history Release notifications | RSS feed

This release

0.8.3 This release

1 release file

0.8.2

1 release file

0.8.1

1 release file

0.8.0

1 release file

0.7.0

1 release file

0.6.1

1 release file

0.6.0

1 release file

0.5.0

1 release file

0.4.2

1 release file

0.4.1

1 release file

0.4.0

1 release file

0.3.0

1 release file

0.2.0

1 release file

0.1.1

1 release file

0.1.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page