Skip to content
This repository was archived by the owner on Sep 30, 2025. It is now read-only.

Repository files navigation

Python Validator (garlic_validator)

Cerberus and validator-collection based custom validator package (garlic_validator) for python projects.

Features


Installation

1. Prerequisites

  • Python (>= v3.7)
  • PyPi (>= v21)

2. Install garlic-validator

A. [RECOMMENDED] PyPi install

# Install or upgrade garlic-validator package:
pip install --upgrade garlic-validator
# To uninstall package:
pip uninstall -y garlic-validator

B. Manually add to PYTHONPATH (Recommended for development)

# Clone repository by git:
git clone https://github.com/bybatkhuu/python_validator.git garlic_validator
cd garlic_validator
# Install python dependencies:
pip install --upgrade pip
cat requirements.txt | xargs -n 1 -L 1 pip install --no-cache-dir
# Add current path to PYTHONPATH:export PYTHONPATH="${PWD}:${PYTHONPATH}"

C. Manually compile and setup (Not recommended)

# Clone repository by git:
git clone https://github.com/bybatkhuu/python_validator.git garlic_validator
cd garlic_validator
# Building python package:
pip install --upgrade pip setuptools wheel
python setup.py build
# Install python dependencies with built package to current python environment:
python setup.py install --record installed_files.txt
# To remove only installed garlic-validator package:
head -n 1 installed_files.txt | xargs rm -vrf
# Or to remove all installed files and packages:
cat installed_files.txt | xargs rm -vrf

Usage/Examples

garlic-validator and validator-collection:

# import torch# import numpy as npfromgarlic_validatorimportvalidators, checkers, errorstry:
email_address=validators.email('test@domain.dev')
# The value of email_address will now be "test@domain.dev"email_address=validators.email('this-is-an-invalid-email')
# Will raise a ValueErroremail_address=validators.email(None)
# Will raise an EmptyValueErrorexcepterrors.EmptyValueError:
# Handling logic goes hereprint('Email address is empty')
excepterrors.InvalidEmailError:
# More handlign logic goes hereprint('Invalid email address')
email_address=validators.email(None, allow_empty=True)
print(email_address)
# The value of email_address will now be Noneemail_address=validators.email('', allow_empty=True)
print(email_address)
# The value of email_address will now be Noneis_email_address=checkers.is_email('test@domain.dev')
print(is_email_address)
# The value of is_email_address will now be Trueis_email_address=checkers.is_email('this-is-an-invalid-email')
print(is_email_address)
# The value of is_email_address will now be Falseis_email_address=checkers.is_email(None)
print(is_email_address)
# The value of is_email_address will now be False## Custom validators:## is_empty(val, trim_str=False)is_empty=checkers.is_empty(None)
# Trueis_empty=checkers.is_empty('')
# Trueis_empty=checkers.is_empty(' ')
# Falseis_empty=checkers.is_empty(' ', trim_str=True)
# Trueis_empty=checkers.is_empty([])
# Trueis_empty=checkers.is_empty({})
# Trueis_empty=checkers.is_empty(())
# Trueis_empty=checkers.is_empty(set())
# Trueis_empty=checkers.is_empty(range(0))
# Trueis_empty=checkers.is_empty(np.array([]))
# True# ## is_numpy(val)# is_numpy = checkers.is_numpy(np.array([]))# # True# is_numpy = checkers.is_numpy(np.array([1, 2, 3]))# # True# is_numpy = checkers.is_numpy(None)# # False# ## is_numpy(val)# is_numpy = checkers.is_tensor(torch.empty(2, 3))# # True# is_numpy = checkers.is_tensor(torch.Tensor([1, 2, 3]))# # True# is_numpy = checkers.is_tensor(None)# # False## is_float(val)is_float=checkers.is_float(1)
# Trueis_float=checkers.is_float(-1.1123)
# Trueis_float=checkers.is_float(1e+123)
# Trueis_float=checkers.is_float('0123.000')
# Trueis_float=checkers.is_float('1e+12')
# Trueis_float=checkers.is_float('2002_12')
# False## is_truthy(val)is_truthy=checkers.is_truthy(True)
# Trueis_truthy=checkers.is_truthy(1)
# Trueis_truthy=checkers.is_truthy('1')
# Trueis_truthy=checkers.is_truthy('1.0')
# Trueis_truthy=checkers.is_truthy('TRUE')
# Trueis_truthy=checkers.is_truthy('True')
# Trueis_truthy=checkers.is_truthy('true')
# Trueis_truthy=checkers.is_truthy('YES')
# Trueis_truthy=checkers.is_truthy('Yes')
# Trueis_truthy=checkers.is_truthy('yes')
# Trueis_truthy=checkers.is_truthy('Y')
# Trueis_truthy=checkers.is_truthy('y')
# Trueis_truthy=checkers.is_truthy(1.1)
# Falseis_truthy=checkers.is_truthy([1])
# Falseis_truthy=checkers.is_truthy(False)
# False## is_falsy(val)is_falsy=checkers.is_falsy(False)
# Trueis_falsy=checkers.is_falsy(0)
# Trueis_falsy=checkers.is_falsy('0')
# Trueis_falsy=checkers.is_falsy('0.0')
# Trueis_falsy=checkers.is_falsy('FALSE')
# Trueis_falsy=checkers.is_falsy('False')
# Trueis_falsy=checkers.is_falsy('false')
# Trueis_falsy=checkers.is_falsy('NO')
# Trueis_falsy=checkers.is_falsy('No')
# Trueis_falsy=checkers.is_falsy('no')
# Trueis_falsy=checkers.is_falsy('N')
# Trueis_falsy=checkers.is_falsy('n')
# Trueis_falsy=checkers.is_falsy(2)
# Falseis_falsy=checkers.is_falsy('a')
# Falseis_falsy=checkers.is_falsy(True)
# False## is_bool(val, coerce_value=False)is_bool=checkers.is_bool(True)
# Trueis_bool=checkers.is_bool(False)
# Trueis_bool=checkers.is_bool(1)
# Falseis_bool=checkers.is_bool('1', coerce_value=True)
# Trueis_bool=checkers.is_bool('NO', coerce_value=True)
# True

Cerberus:

fromcerberusimportValidatorv=Validator({ 'name': { 'type': 'string' } })
print(v.validate({ 'name': 'john doe' }))
# Truev.schema= {'amount': {'type': 'integer'}}
print(v.validate({'amount': '1'}))
# Falseprint(v.errors)
# {'amount': ['must be of integer type']}v.schema= {'amount': {'type': 'integer', 'coerce': int}}
print(v.validate({'amount': '1'}))
# Trueprint(v.document)
# {'amount': 1}to_bool=lambdav: v.lower() in ('true', '1')
v.schema= {'flag': {'type': 'boolean', 'coerce': (str, to_bool)}}
print(v.validate({'flag': 'true'}))
# Trueprint(v.document)
# {'flag': True}

pydantic:

frompydanticimportvalidate_arguments, ValidationError@validate_argumentsdefrepeat(s: str, count: int, *, separator: bytes=b'') ->bytes:
b=s.encode()
returnseparator.join(bfor_inrange(count))
a=repeat('hello', 3)
print(a)
#> b'hellohellohello'b=repeat('x', '4', separator=' ')
print(b)
#> b'x x x x'try:
c=repeat('hello', 'wrong')
exceptValidationErrorasexc:
print(exc)
""" 1 validation error for Repeat count value is not a valid integer (type=type_error.integer) """

Running Tests

To run tests, run the following command:

pytest

References

About

Cerberus and validator-collection based custom validator package (garlic_validator) for python projects.

Topics

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages