Metadata-Version: 2.1
Name: pylidator
Version: 1.0.2
Summary: A practical system for organizing validation rules
Home-page: https://github.com/mathandpencil/pylidator
Author: Scott Stafford
Author-email: scott.stafford+pylidator@gmail.com
License: MIT
Keywords: validation validate
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.7
Description-Content-Type: text/markdown
Provides-Extra: dev
Requires-Dist: check-manifest ; extra == 'dev'
Provides-Extra: test
Requires-Dist: coverage ; extra == 'test'

# 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 the data.  They all look basically like this:

```python
@pylidator.validator(of="something")
def something_is_true(data):
    messages = []

    if desired_condition_about_field_is_untrue:
        messages.append({"affected_field": "Should be different like this."}

    if another_desired_condition_about_the_object_is_untrue:
        messages.append("I wish this changed.")

    return messages
```

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

## Argument Reference

@pylidator.validator 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.
```

