Skip to main content

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
)

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.1.0.tar.gz (8.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

valify-0.1.0-py3-none-any.whl (7.4 kB view details)

Uploaded Python 3

File details

Details for the file valify-0.1.0.tar.gz.

File metadata

  • Download URL: valify-0.1.0.tar.gz
  • Upload date:
  • Size: 8.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for valify-0.1.0.tar.gz
Algorithm Hash digest
SHA256 885420c83d40a1dfa543beb4af4af0fc6405fdf5de24f026f18cdc2622d9a048
MD5 ceb7b553f86c91b454b13c6b40ff32cd
BLAKE2b-256 c1a6b6d3bb2d1418c0bcba033f452634858a8a057f0b3f8318cb3001ac2ac197

See more details on using hashes here.

File details

Details for the file valify-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: valify-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 7.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for valify-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e7094068a9a93f4254efa36ed71dc400100596840fe1fe469aeb65e6dd3c6750
MD5 7e75330be600e878a58b475b6927f5bf
BLAKE2b-256 d2150825e7c39a3d4fed7c695e01fd82cba6671cba5933cd4c887f7679d74530

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page