A composable, expressive data validation library for python
Project description
valify
A composable, expressive data validation library for Python.
Installation
pip install valify
Quick Start
from valify import Schema, StringValidator, IntValidator, EmailValidator
schema = Schema({
"name": StringValidator(min_length=2, max_length=50),
"age": IntValidator(min_value=0, max_value=120),
"email": EmailValidator(),
})
# Valid data — returns cleaned, validated dictionary
result = schema.validate({
"name": "Alice",
"age": 30,
"email": "alice@example.com",
})
print(result)
# {'name': 'Alice', 'age': 30, 'email': 'alice@example.com'}
# Invalid data — raises ValidationError with ALL errors at once
schema.validate({
"name": "A",
"age": -5,
"email": "not-an-email",
})
# ValidationError: Validation failed:
# name: Must be at least 2 characters long.
# age: Must be at least 0.
# email: 'not-an-email' is not a valid email address.
Validators
| Validator | What it checks |
|---|---|
StringValidator |
Strings, with optional min/max length |
IntValidator |
Integers, with optional min/max value |
FloatValidator |
Floats, with optional min/max value |
BoolValidator |
Booleans, with optional string coercion |
EmailValidator |
Email address format |
Validators in Detail
StringValidator
from valify import StringValidator
v = StringValidator(
min_length=2, # minimum character length
max_length=50, # maximum character length
strip=True, # strip whitespace before validating (default: True)
)
IntValidator
from valify import IntValidator
v = IntValidator(
min_value=0, # minimum allowed value
max_value=120, # maximum allowed value
coerce=False, # if True, converts "42" -> 42 (default: False)
)
EmailValidator
from valify import EmailValidator
v = EmailValidator()
v.validate("alice@example.com") # returns "alice@example.com"
Using Validators Standalone
Validators work without a Schema too:
from valify import IntValidator
from valify.exceptions import ValidationError
v = IntValidator(min_value=0)
try:
v.validate(-1)
except ValidationError as e:
print(e.message) # Must be at least 0.
print(e.value) # -1
Error Handling
from valify.exceptions import (
ValifyError, # base — catches everything
ValidationError, # a value failed validation
RequiredFieldError, # a required field was missing
SchemaError, # the schema definition is invalid
)
Version History
- 0.3.0 — Added
OptionalValidator,ListValidator,EnumValidator - 0.2.0 — Full type hints and mypy compatibility
- 0.1.0 — Initial release
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
valify-0.4.0.tar.gz
(10.9 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file valify-0.4.0.tar.gz.
File metadata
- Download URL: valify-0.4.0.tar.gz
- Upload date:
- Size: 10.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d74b72abd196640dfd51f8006f9c32574fd85b11cef5f414a87ebd5daca8472c
|
|
| MD5 |
a1bdc0c5c01d38a195b1f054df511ffa
|
|
| BLAKE2b-256 |
8e6380f37a92b9c3c43798603ecad068f11b20da4f3a448635f78a30f35c4e67
|
File details
Details for the file valify-0.4.0-py3-none-any.whl.
File metadata
- Download URL: valify-0.4.0-py3-none-any.whl
- Upload date:
- Size: 9.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d7136a44b9d032138950e97eca17f939d35afadc33fe02597e4610019cd8dbbd
|
|
| MD5 |
ac3488c59a8b3b86bd8bba1106016446
|
|
| BLAKE2b-256 |
6929bee15566653df157e79f5a77fd8474667e150e93247d760177b38809c8cf
|