Benefits of utilipy

>>> import utilipy

Decorators

utilipy-built decorators are better than normal decorators.

This decorator does:

  • anything to the function input and output

  • make a function that looks exactly like the input function for quality introspection.

  • work when created with parenthesis

  • accept (kw)arguments on application

  • add any extra (kw)arguments to control the wrapper also make the defaults be dynamically set on function creation.

  • document what the wrapper is doing.

    >>> def template_decorator(function=None, *, kw1=None, kw2=None):
    ...     ''''Docstring for decorator.
    ...
    ...     Description of this decorator
    ...
    ...     Parameters
    ...     ----------
    ...     function : types.FunctionType or None, optional
    ...         the function to be decoratored
    ...         if None, then returns decorator to apply.
    ...     kw1, kw2 : any, optional
    ...         key-word only arguments
    ...         sets the wrappeer's default values.
    ...
    ...     Returns
    ...     -------
    ...     wrapper : types.FunctionType
    ...         wrapper for function
    ...         does a few things
    ...         includes the original function in a method `.__wrapped__`
    ...
    ...     '''
    ...     if function is None: # allowing for optional arguments
    ...         return functools.partial(template_decorator, kw1=k1, kw2=kw2)
    ...
    ...     @utilipy.wraps(function)
    ...     def wrapper(*args, kw1=kw1, kw2=kw2, kw3='not in decorator factory', **kw):
    ...         """wrapper docstring.
    ...
    ...         Decorator
    ...         ---------
    ...         prints information about function
    ...         kw1, kw2: defaults {kw1}, {kw2}
    ...
    ...         """
    ...         # do stuff here
    ...         return_ = function(*args, **kw)
    ...         # and here
    ...         return return_
    ...     # /def
    

    … return wrapper … # /def