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.
Metadata
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)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| pylidator-1.1.6.tar.gz | 12.6 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pylidator-1.1.6-py2.py3-none-any.whl | Python 3, Python 2 | 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
|
Security for pylidator 1.1.6
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.