Skip to main content

decorator for fast check types of arguments which are given to function

Project description

GitHub last commit GitHub license<space><space> Documentation Status https://travis-ci.org/stas-prokopiev/char.svg?branch=master PyPI PyPI - Python Version

Overview.

char stands for: check of arguments.

This library gives to user ability to check types of function arguments via one decorator.

If your team or you have some agreements how to name variables with defined types
Or if you are ready to use mine (they will be described bellow)
then type checking will be simple and pleasant.

Example

Let’s say that you defined a function func(int_x) and you want to check
if value that is given to variable int_x has type int
Usually you would have to check it yourself somehow like this: isinstance(int_x, int)
But with this decorator this can be done for you automatically.
from char import char
# OR from char import check_types_of_arguments  # They are equivalent

@char
def func(int_x):
    pass
If you try to call function with wrong types of arguments: func(“pewpew”)
then you’ll get a nice exception with description:
ArgumentTypeError: Incorrect type of variable was given to function: func
---> For variable: int_x
---> Were given value: pewpew
---> With type: <class 'str'>
---> Instead of: <class 'int'>

Installation via pip:

pip install char

Usage with default settings

Default prefixes

Here will be a list of name prefixes and which type the variable is expected to be

If variable name doesn’t start with ony of the given prefixes then variable type won’t be checked.

  1. “any_” - object

  2. “bool_” - bool

  3. “b_” - bool

  4. “is_” - bool

  5. “has_” - bool

  6. “str_” - str

  7. “bytes_” - bytes

  8. “int_” - int

  9. “i_” - int

  10. “float_” - float

  11. “f_” - float

  12. “list_” - list

  13. “l_” - list

  14. “dict_” - dict

  15. “d_” - dict

  16. “set_” - set

  17. “tuple_” - tuple

  18. “t_” - tuple

Example

from char import char

@char
def oh_my_god(
        int_arg,
        float_arg,
        list_arg,
        undef_arg,
        d_kwarg=None,
        i_kwarg=0,
        is_kwarg=False
):
    pass

oh_my_god(0, 0.0, [], 1)  # Will PASS
oh_my_god(0, 0.0, None, "text")  # Will PASS
oh_my_god(0, 0.0, {}, "text")  # Will FAIL and raise an ArgumentTypeError
oh_my_god(0, 0.0, [], Exception, d_kwarg={0: 1})  # Will PASS
oh_my_god(0, 0.0, [], object, is_kwarg=0)  # Will FAIL and raise an ArgumentTypeError

Usage with user defined settings

Decorator arguments

  1. bool_is_to_skip_None_value=True: Flag what to do with None values, by default None values won’t be checked.

  2. dict_tuple_types_by_prefix_to_update_default: dictionary, which prefixes to add to the default ones

  3. dict_tuple_types_by_prefix: dictionary, which prefixes to use instead of default ones

Your can use any combination of given arguments for the decorator.
For simplicity will be shown usage of every argument separately.

Decorator argument: bool_is_to_skip_None_value

@char
def func_with_default_decorator(dict_x):
    pass

@char(bool_is_to_skip_None_value=False)
def func_with_custom_decorator(dict_x):
    pass

func_with_default_decorator(None)  # Will PASS
func_with_custom_decorator(None)  # Will FAIL and raise an ArgumentTypeError

Decorator argument: dict_tuple_types_by_prefix_to_update_default

@char(dict_tuple_types_by_prefix_to_update_default={"num_": (int, float, bool)})
def very_complex_function(num_x, str_y=""):
    pass

very_complex_function(0, "hihi")  # Will PASS
very_complex_function(0.5, "heyhey")  # Will PASS
very_complex_function(True)  # Will PASS
very_complex_function("True")  # Will FAIL and raise an ArgumentTypeError

Decorator argument: dict_tuple_types_by_prefix

@char(dict_tuple_types_by_prefix={"exception": (BaseException)})
def function_with_only_one_check(int_x, exception_y=None):
    pass

function_with_only_one_check(0, Exception)  # Will PASS
function_with_only_one_check(0.5, TypeError)  # Will PASS because first variable won't be checked
function_with_only_one_check(0.5, "ERROR")  # Will FAIL and raise an ArgumentTypeError

Contacts

License

This project is licensed under the MIT License.

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

char-0.1.0.tar.gz (18.6 kB view hashes)

Uploaded Source

Built Distribution

char-0.1.0-py2.py3-none-any.whl (6.5 kB view hashes)

Uploaded Python 2 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