Skip to main content

Fast Argument validation for functions using decorators

Project description

Validation Decorators

Unittest Static Badge PyPI - Python Version Poetry

Simple and fast type-checking and parameter validation.

Install with

pip install decorator-validation

Why?

Do you want to remove visual clutter in your python function? Do you want to check types fast without a lot of boilerplate?

Then this package is right for you.

Not convinced? Check out the following:

# classic
def foo(bar: int, message: str, some_additional_info: dict):
    if not isinstance(bar, int):
        raise TypeError(...)
    if not isinstance(message, str):
        raise TypeError(...)
    if not isinstance(some_additional_info, dict):
        raise TypeError(...)
    # now begin to code...

# now
from decorator_validation import check_types

@check_types
def foo(bar: int, message: str, some_additional_info: dict):
    # begin to code

Checkout the codebase for more examples and built in decorators!

NOTE: check_types has limitations for python versions lower than 3.10 due to lack of built in language support for type-checking. Use with caution with special types and None-Types!

More Example

Of course, sometimes you want to have a custom validation method for all your inputs. It just needs to return if the input is valid or not.

from decorator_validation import check_types
from pathlib import Path

def my_validation_func(file_path:str) -> True:

    if not isinstance(file_path, str):
        raise TypeError(...)
    if not Path(file_path).resolve().is_file():
        raise ValueError(...)
    return True

class FileReader:

    @check_types(file_path=my_validation_func)
    def __init__(self, file_path: str):
        ...

Default Validators

This Repository comes with its own default validation functions, like if an input is a valid file. A Validation function is a function that returns True of False (or raises an exception) if the input is correct / incorrect.

from decorator_validation import check_types
from decorator_validation.std_validators import is_file

class FileReader:

    @check_types(file_path=is_file)
    def __init__(self, file_path: str):
        ...

Validate Arbitrary Arguments

You can of course combine validation functions with type-check-skipping and the signature_usage. SkipTypeCheck can be used for non-supported types in type-hinting etc.

from decorator_validation import check_types, SkipTypeCheck
from decorator_validation.std_validators import is_file

class Logger:

    @check_types(file_path=is_file, message=(SkipTypeCheck,))
    def log(file_path: str, message: str, repeat: int = 1):
        ...

    log('some_file.txt', 'hello')  # works
    log('some_file.txt', 2)  # works
    log('some_file.txt', 2, '3')  # does not work

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

decorator_validation-4.0.0.tar.gz (4.9 kB view hashes)

Uploaded Source

Built Distribution

decorator_validation-4.0.0-py3-none-any.whl (6.2 kB view hashes)

Uploaded Python 3

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