Skip to main content

pylidator

pylidator is a validation framework for Python projects.

Many business systems have complex validation rules. This library provides a method of organizing those rules for convenience and testability. A validator method is written for each rule (or group of rules), which simply returns a list of errors if any are found.

Validators

A validator method checks the validity of one or a closely-related group of assertions about a piece of data. They all look basically like this:

import pylidator

@pylidator.validator(of="child")
def child_is_valid(child):
    messages = []

    if child['age'] >= 18:
        messages.append({"age": "Child is too old."}

    if child['type'] != 'human':
        messages.append({"type": "Only humans allowed."}

    return messages

(Alternately, you can return just a dict of {field: message} items.)

Validating Something

Once you have authored some @pylidator.validator methods as above, you can use them! Try this:

import pylidator

objs = {
    'name': "Mrs. Teacher's Class",
    'children': [
        {'name': "Joe", 'age': 15, 'type': 'human'},
        {'name': "Sarah", 'age': 19, 'type': 'human'},
    ]
}

# Define a provider
def _provide_child(obj):
    for i, c in enumerate(obj['children']):
        yield c, {"description": "Child {}".format(i)}

providers = {"child": _provide_something}  # "child" matches the `of` argument of the `@pylidator.validator`.
ret = pylidator.validate(objs, {pylidator.ERROR: [some_values_are_valid]}, providers=providers)

child_is_valid will be invoked once per child, and any that return something truthy will show as an ERROR.

Function Reference

@pylidator.validator decorates any method that will be passed to pylidator.validate, and takes several optional parameters:

@pylidator.validator(of, requires=None, affects=None)

`of` specifies what provider the validator should use.   The `validate` call needs an item in `providers`
     that matches `of`.
`requires` (optional) can add additional context items, such as the current time or other services that can supply
     data or settings to the validator.  The requirement is fulfilled by passing `extra_context` to the `validate`
     call, containing any items that are used in a `requires`.
`affects` (optional) is simply passed through to results.  It can be used as guidance for UI/error reporting for
     helping to resolve any resultant errors.
pylidator.validate(
    obj, validators=None, providers=None, extra_context=None, field_name_mapper=None, 
    validation_type=None)

`obj` is the top-level object requiring validation.
`validators` is a dict of {level: list of `@pylidator.validator` objects}
`providers` is a dict of {of: func that takes obj and returns an iterable of some subobjects}
`extra_context` is a dict of other data that can be injected into `@pylidator.validator` with `requires`.
`field_name_mapper` is a string->string func that converts field names given in returned errors into verbose names.
`validation_type` is added as documentation into the error object.
`logging` If set to False, disables logging of validation results.
`why` String added to logging to identify the logpoint.

Release files for pylidator 1.1.6

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

Source distribution (sdist)

Source distribution for pylidator 1.1.6
File Size Uploaded
pylidator-1.1.6.tar.gz 12.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pylidator 1.1.6
File Interpreter ABI Platform
pylidator-1.1.6-py2.py3-none-any.whl Python 2, Python 3 none any Details

Total release size: 25.6 kB

Release files / pylidator-1.1.6.tar.gz

Download URL pylidator-1.1.6.tar.gz
Size 12.6 kB
Tags Source
SHA-256 checksum
How to use checksums
f0a0504d340f34e55b8617d632ee6184565001aa7693b7acf7dc99f09ec18640
BLAKE2b-256 checksum
How to use checksums
fabca6b996dc0609b9c5abb4a1d8401e482df1c29c185d7f8e7c0e9a11649b99
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.12.7

Release files / pylidator-1.1.6-py2.py3-none-any.whl

Download URL pylidator-1.1.6-py2.py3-none-any.whl
Size 13.0 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
633b61f754e51f8a54c74ff2f183da0524d1fcf030d7f828fb99a02bdb6b8da5
BLAKE2b-256 checksum
How to use checksums
5d0d8617df7ef1b1c6b80637f366a0344f67c2a49f57e85c8690da9bcaad3024
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.12.7

Release history Release notifications | RSS feed

This release

1.1.6 This release

2 release files

1.1.5

2 release files

1.1.4

2 release files

1.1.3

2 release files

1.1.2

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

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