Skip to main content

Validator

Validator is a Python library for dealing with request validating.

Table of Contents

Installation

Use the package manager pip to install Validator.

pip install validator

Usage

User should pass request dictionary and rules dictionary for validating data in the request.

Please see examples below:

from validator import validate

request = {"name": "John Doe",
           "age": 33,
           "mail": "john_doe@gmail.com"}

rules = {"name": "required",
         "age": "integer|min:18",
         "mail": "required|mail"}

result = validate(request, rules) # True

validate() returns either True or False.

Another option is to use Validator class

from validator import Validator

request = {...}
rules = {...}

val = Validator(request, rules)
result = val.validate() # True

Validated Data/Error Messages

Validator allows user to have a look at failed validations and passed validations. validated_data is extremly useful when request contains data that is not needed for initialization of model, you can get rid of them and validate at the same time. See examples below:

  • Validated Data

    from validator import validate
    
    request = {"first_name": "John",
               "last_name": "Doe",
               "age": 33,
               "mail": "johndoe@gmail.com",
               "_token": "WpH0UPfy0AXzMtK2UWtJ",
               "_cookie_data": "e9Uixp8hzUySy6bw3MuZ",
               "_session_id": "ZB7q7uIVdWBKgSCSSWAa"}
    
    rule = {"first_name": "required",
            "last_name": "required",
            "age": "required|min:18",
            "mail": "required|mail"}
    
    result, validated_data, _ = validate(request, rule, return_info=True)
    """
    result = True
    validated_data = {"first_name": "John",
                      "last_name": "Doe",
                      "age": 33,
                      "mail": "johndoe@gmail.com"}
    """
    
  • Error Messages

    from validator import validate
    
    request = {"name": "",
               "mail": "john_doe"}
    
    rule = {"name": "required",
            "mail": "mail"}
    
    result, _, errors = validate(request, rule, return_info=True)
    
    """
    result = False
    errors = {"name": {"Required': "Field was empty"},
              "mail": {"Mail': "Expected a Mail, Got: john_doe"}}
    """
    

Or you can use Validator class for error messages as well as for validated data.

val = Validator(request, rules)
result = val.validate()
validated_data = val.get_validated_data()
errors = val.get_errors()

Validating Arrays

Validator comes with validate_many() function, which validates multiple requests. Function takes list of requests and one rule. This rule is checked for all the requests. If one or more requests fail validation function returns False, otherwise (if all pass) True. For more details see example below:

Validation Passes:

from validator import validate_many

requests = [{"name": "John"},
            {"name": "Rob"},
            {"name": "Tom"},
            {"name": "Greg"}]
rule = {"name": "required|min:3"}

result = validate_many(requests, rule) # True

We can also have a look at failed validations and error messages. validate_many() takes third argument as boolean, indicating return of error messages.

Validation Fails:

from validator import validate_many

requests = [{"name": "John"},
            {"name": ""},
            {"name": "Yo"},
            {"name": "Greg"}]
rule = {"name": "required|min:3"}

result, errors = validate_many(requests, rule, return_info=True)
"""
result = False
errors = [{},
          {"name": {"Min": "Expected Maximum: 3, Got: 0", "Required": "Field was empty"}},
          {"name": {"Min": "Expected Maximum: 3, Got: 2"}},
          {}]
"""

Available Validation Rules

Validator comes with pre initialized rules. All of rules are listed in RULES.md file

Rules

Validator Rules can be used in different ways. Please see some examples below:

Strings

rule = {"name": "required",
        "age": "integer|min:18",
        "mail": "required|mail"}

Array of Strings

rule = {"name": ["required"],
        "age": ["integer", "min:18"],
        "mail": ["required", "mail"]}

Array of Rules

from validator import rules as R

rules = {"name": [R.Required()],
         "age": [R.Integer(), R.Min(18)],
         "mail": [R.Requried(), R.Mail()]}

Other Miscellaneous

from validator import rules as R

rules = {"name": R.Required(),           # no need for Array Brackets if one rule
         "age": [R.Integer, R.Min(18)],
         "mail": [R.Requried, R.Mail]}   # no need for class initialization with brakcets () 
                                        # if no arguments are passed to rule

Rules Interconnection

Rules can affect each other. Let's take a look at Size rule. It takes 1 argument and checks if data is equal to given value (example: 'size:10').

  • Case 1: checks for length of '18' to be 18. len('18') is 2, therefore it is False.
request = {"age" : "18"}
rule = {"age" : "size:18"}

validate(request, rule)
"""
result = False
errors = {"age": {"Size": "Expected Size:18, Got:2"}}
"""
  • Case 2: checks if int representation of '18' is equal to 18. (int('18') = 18), therefore it is True.
request = {"age" : "18"}
rule = {"age" : "integer|size:18"}

validate(request, rule) # True

For more details please view Size Rule

Custom Rules

We give users ability to advance and use their own checkers. Write function and use is as a rule. See examples below:

  1. Use defined functions:
    from validator import validate
    
    def func_age(x):
        return x >= 18
    
    req = {"age": 30}
    rules = {"age": func_age}
    
    validate(req, rules)
    
  2. Use Lambda functions:
    from validator import validate
    
    req = {"age": 30}
    rules = {"age": lambda x: x >= 18}
    
    validate(req, rules)
    
  3. Any callable class (NOTE: Pass class instance and not class itself):
    from validator import validate
    
    class checker:
      def __init__(self):
          pass
    
      def __call__(self, x):
          return x >= 456
    
    req = {"age": 30}
    rules = {"age": checker()}
    
    validate(req, rules)
    
  4. Custom Rule:
    from validator import validate
    from validator.rules import Rule
    
    class AgeRule(Rule):
        def __init__(self, min):
            Rule.__init__(self)
            self.min = min
    
        def check(self, arg):
            return self.min <= arg
    
    req = {"age": 30}
    rules = {"age": AgeRule(18)}
    
    validate(req, rules)
    

Examples

We have written some examples for you to get started easier. Please view Examples folder, where you can find validator usages with frameworks like Flask, Django and etc.

Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

Please see CONTRIBUTING.md before making PR :)

License

MIT

Release files for validator 0.7.1

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

Source distribution (sdist)

Source distribution for validator 0.7.1
File Size Uploaded
validator-0.7.1.tar.gz 41.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for validator 0.7.1
File Interpreter ABI Platform
validator-0.7.1-py3-none-any.whl Python 3 none any Details

Total release size: 70.9 kB

Release files / validator-0.7.1.tar.gz

Download URL validator-0.7.1.tar.gz
Size 41.9 kB
Tags Source
SHA-256 checksum
How to use checksums
926714169dc82a233a68041c395bc12e49d2c4cd7d6103ff3fb3565bd7f66d06
BLAKE2b-256 checksum
How to use checksums
321aac715f06008105fb8099ba0d936477601dc5a79df36d7af3efb8704335a9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.4.2 importlib_metadata/4.6.4 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.1 CPython/3.9.5

Release files / validator-0.7.1-py3-none-any.whl

Download URL validator-0.7.1-py3-none-any.whl
Size 29.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
bd333e36c1bd07dfa8ad0ecc64d141cbc1863d07e033ab84eada333cb154f4bd
BLAKE2b-256 checksum
How to use checksums
af1515dda6172e8060607c3b5fa068195e7a188d9def6430f5e91b4c8e4c5c37
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.4.2 importlib_metadata/4.6.4 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.1 CPython/3.9.5

Release history Release notifications | RSS feed

This release

0.7.1 This release

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.3

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

0.0.3

2 release files

0.0.2

2 release files

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