Fast Argument validation for functions using decorators
Project description
Validation Decorators
Simple and fast type-checking and parameter validation at runtime.
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
The check_types
decorator takes override kwargs to overwrite the type-hints
@check_types(bar=float, message=(str, bytes))
def foo(bar: int, message: str, some_additional_info: dict):
# begin to code
although this is more usefull to skip a check with
from decorator_validation import check_types, SkipTypeCheck
@check_types(message=SkipTypeCheck)
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! Furthermore wrap types inside of tuples if they are not of type type!
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.
You can use the make_validator
function to shorten the code even more.
from decorator_validation import check_types, make_validator
from pathlib import Path
@make_validator
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(...)
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for decorator_validation-4.1.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | d0928cbbe770ba07233d97da5de9eb1340dc90ba54f958cc3e825f71dbc285c3 |
|
MD5 | 7c2f6af65ad09641793b7f4965a3e8b9 |
|
BLAKE2b-256 | 310aeaf5f250357f98b903fa74ff62ee8e90f61c0e7520fcc03dcefaa957f731 |
Hashes for decorator_validation-4.1.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d7f2d79dc72778b34900ddc4ca19e0a5547bebeaa92cc7c024d7acee07253d53 |
|
MD5 | 876218f0b2fb266bbb47007a6de2013f |
|
BLAKE2b-256 | 7a91f345d6ec295e5baf6256fc7dcc070de55604e63829b5cab23eca944dcd37 |