Skip to main content

Tiny validation library for Python

Project description

lilVali

A small Python 3.12 validation experiment for playing with PEP 695.

Supports most basic typing constructs including Generics. Also supports dataclasses and classes with annotated __init__ methods.

Install

pip install lilvali

Usage

from lilvali import validate, validator
from lilvali.errors import *

Simple examples

@validate
def add[T: (int, float)](x: int, y: T) -> int | float:
    return x + y


def main():
    print(f"{add(1, 2)=}")
    print(f"{add(1, 2.0)=}")

    try:
        print(f"{add(1.0, 2)=}")
    except ValidationError as e:
        print(f"{e=}")
    else:
        raise RuntimeError("Expected ValidationError")


if __name__ == "__main__":
    main()
@validate
@dataclass
class SomeClass:
    x: int
    y: str = field(default="hello")

    @validator
    def _x(value):
        if value is None or value < 0:
            raise ValidationError

    @validator
    def _y(value) -> bool:
        return value == "hello"


@validate
class NotADC:
    def __init__(self, x: int, y: str):
        self.x = x
        self.y = y

    @validator
    def _x(value):
        if value is None or value < 0:
            raise ValidationError

    @validator
    def _y(value) -> bool:
        return value == "hello"

See the demo folder as well.

Tests

$ ./test.sh
Running tests with coverage
.........................
----------------------------------------------------------------------
Ran 25 tests in 0.006s

OK
Name                           Stmts   Miss  Cover   Missing
------------------------------------------------------------
lilvali/__init__.py                2      0   100%
lilvali/binding.py               167      0   100%
lilvali/errors.py                  6      0   100%
lilvali/validate.py               80      0   100%
tests/test_tiny_validate.py      195      0   100%
tests/test_validate_types.py     124      0   100%
------------------------------------------------------------
TOTAL                            574      0   100%

TODO

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

lilvali-0.1.6.tar.gz (13.6 kB view details)

Uploaded Source

Built Distribution

lilvali-0.1.6-py3-none-any.whl (18.1 kB view details)

Uploaded Python 3

File details

Details for the file lilvali-0.1.6.tar.gz.

File metadata

  • Download URL: lilvali-0.1.6.tar.gz
  • Upload date:
  • Size: 13.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.12.0

File hashes

Hashes for lilvali-0.1.6.tar.gz
Algorithm Hash digest
SHA256 bdc337ae10699be73ede4ebd8ef07e46845f926ecb3146e55c437a1336496ce5
MD5 ace9f6ea5ba924ce38bf67b51fc04386
BLAKE2b-256 032f7377bf1a0723c0ba63f4feebc42f825c3bed3540b841af29d63f2275ca58

See more details on using hashes here.

File details

Details for the file lilvali-0.1.6-py3-none-any.whl.

File metadata

  • Download URL: lilvali-0.1.6-py3-none-any.whl
  • Upload date:
  • Size: 18.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.12.0

File hashes

Hashes for lilvali-0.1.6-py3-none-any.whl
Algorithm Hash digest
SHA256 499b4727e7ef7622efb12a1991f6d1963627073ef05de559340e7e127b653222
MD5 024faf9bd55ca766ca5a29f6472ae48a
BLAKE2b-256 0a71829f4494ad03f97062a4b41939bc28a2435076baede075262f991d62147a

See more details on using hashes here.

Supported by

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