Skip to main content

Simple Validation Library for Python

Project description

Python Python
Package PyPI Latest Release PyPI Downloads codecov
Meta License - MIT

pycsi

pycsi is a simple python library to validate data and/or build a validation schema.

Installation

pip install pycsi

Usage

We might begin by creating validation callables such:

def is_divisible_by_three(x: float):
    return x % 3 == 0

def is_all_positive(numbers: list[float]):
    return all(number > 0 for number in numbers)

def is_quotient_positive(x: float, y: float):
    return x / y > 0

Then we can instantiate a Subvalidator instance and the validation callables to it:

from pycsi import Subvalidator

first_subvalidator = Subvalidator(
    "First condition",
    "Number is not divisible by 3",
    is_divisible_by_three,
    x=3
    )

second_subvalidator = Subvalidator(
    "Second condition",
    "Not every number is positive",
    is_all_positive,
    numbers=[1, 2, 3, 4, 5, 6, 7, 8, 9, -10],
    )

third_subvalidator = Subvalidator(
    "Third condition",
    "Quotient is not positive",
    is_quotient_positive,
    x=10,
    y=2,
    )

Finally we can create a validator object and add the subvalidators to it.

from pycsi import Validator

validator = Validator()

validator.add(first_subvalidator)
validator.add(second_subvalidator)
validator.add(third_subvalidator)

validator.run()

The validator will run all the subvalidators and the unvalidated_set property will return a set of the failed subvalidators.

print(validator.unvalidated_set)
{ValidatorError(condition='Second condition', error_message='Not every number is positive')}

Asynchronous Usage

This library also supports async validation. We can create asyncronous validation callables such:

import asyncio

async def async_is_divisible_by_three(x: float) -> bool:
    await asyncio.sleep(0.1)
    return is_divisible_by_three(x)

async def async_is_all_positive(numbers: list[float]) -> bool:
    await asyncio.sleep(0.1)
    return is_all_positive(numbers)

Instead of using the Subvalidator API, we are going to use the AsyncSubvalidator in the next step:

from pycsi import AsyncSubvalidator

first_subvalidator = AsyncSubvalidator(
    "First condition",
    "Number is not divisible by 3",
    async_is_divisible_by_three,
    x=10,
    )

second_subvalidator = AsyncSubvalidator(
    "Second condition",
    "Not every number is positive",
    async_is_all_positive,
    numbers=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
    )

Same for the Validator API, we will switch the the AsyncValidator.

from pycsi import AsyncValidator

validator = AsyncValidator()
validator.add(first_subvalidator)
validator.add(second_subvalidator)

validator.run()
print(validator.unvalidated_set)
{ValidatorError(condition='First condition', error_message='Number is not divisible by 3')}

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

pycsi-0.1.0.tar.gz (5.1 kB view details)

Uploaded Source

Built Distribution

pycsi-0.1.0-py3-none-any.whl (7.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: pycsi-0.1.0.tar.gz
  • Upload date:
  • Size: 5.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.5

File hashes

Hashes for pycsi-0.1.0.tar.gz
Algorithm Hash digest
SHA256 7b7e2d7e0bc2c2f12240a28a5d72fc41c2f26ccedadf321a4b0f71f820808857
MD5 9a268143b264e7f22064058bc7edde33
BLAKE2b-256 593da142c8dd3e95af07e4675b47ed75e3900a6d4d2229a5bebf1035d656d3b0

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pycsi-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 7.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.5

File hashes

Hashes for pycsi-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 77538b9ec88d2d12f0373695d9ad588d621e46e30662d14d77ecb7390cc023d2
MD5 8a7d4e2b5f780385057fbebbc05daac3
BLAKE2b-256 8fa21e18d3ff770f3aa8f39a4da608fe6aa1feb4d2333ba264f96ed1b3f398d1

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