def define(no_args=NO_ARGS, cls=Chain, binds=False, takes_result=False, provides=None): """ Defines a new chain """ def decorator(func): chain = cls(func, binds=binds, takes_result=takes_result, provides=provides) _chains.append(chain) def wrapper(*args, **kwargs): # Use __traceback_hide__ which is used by a few libraries # to hide internal frames. Django supports this. __traceback_hide__ = True # NOQA return chain(*args, **kwargs) wrapper._chain = chain functools.update_wrapper(wrapper, func) return wrapper return no_args_decorator(decorator, no_args)
def debounced(no_args=NO_ARGS, hashable_args_cb=None): def decorator(func): def wrapper(*args, **kwargs): if debouncer.middleware_enabled: debouncer.debounce( func, args, kwargs, hashable_args_cb=hashable_args_cb ) else: func(*args, **kwargs) functools.update_wrapper(wrapper, func) return wrapper return no_args_decorator(decorator, no_args)