Skip to content

Getting started

The idea is kind of simple: each function in the library is a (function) decorator with a specific objective in mind.

Example: log decorator
from deczoo import log

@log # equivalent to @log(log_time=True, log_args=True, log_error=True, logging_fn=print)
def custom_add(a, b, *args):
    """Adds all arguments together"""
    return sum([a, b, *args])

_ = custom_add(1, 2, 3, 4)
# custom_add args=(a=1, b=2, args=(3, 4)) time=0:00:00.000062

 _ = custom_add(1, "a", 2)
# custom_add args=(a=1, b=a, args=(2,)) time=0:00:00.000064 Failed with error: unsupported
# operand type(s) for +: 'int' and 'str'
Example: shape_tracker decorator
from deczoo import shape_tracker

@shape_tracker(shape_in=True, shape_out=True, shape_delta=True, raise_if_empty=True)
def tracked_vstack(a: np.ndarray, b: np.ndarray) -> np.ndarray:
    return np.vstack([a, b])

_ = tracked_vstack(np.ones((1, 2)), np.ones((10, 2)))
# Input: `a` has shape (1, 2)
# Output: result has shape (11, 2)
# Shape delta: (-10, 0)

Features

The library implements the following decorators:

  • call_counter: tracks how many times a function has been called.
  • catch: wraps a function in a try-except block, returning a custom value, or raising a custom exception.
  • check_args: checks that function arguments satisfy its "rule".
  • chime_on_end: notify with chime sound on function end (success or error).
  • log: tracks function time taken, arguments and errors, such logs can be written to a file.
  • timer: tracks function time taken.
  • memory_limit: sets a memory limit while running the function.
  • notify_on_end: notifies when function finished running with a custom notifier.
  • retry: wraps a function with a "retry" block.
  • shape_tracker: tracks the shape of a dataframe/array-like object, in input and/or output.
  • multi_shape_tracker: tracks the shapes of input(s) and/or output(s) of a function.
  • timeout: sets a time limit for the function, terminates the process if it hasn't finished within such time limit.

Examples

Please refer to the api page to see a basic example for each decorator.