diff --git a/anki/hooks.py b/anki/hooks.py index 7c5270bce..f29e75003 100644 --- a/anki/hooks.py +++ b/anki/hooks.py @@ -13,6 +13,14 @@ If you call wrap() with pos='around', the original function will not be called automatically but can be called with _old(). """ +import functools + +try: + # optional: like functools.wraps, but signature-preserving + import decorator +except ImportError: + decorator = None + # Hooks ############################################################################## @@ -59,4 +67,11 @@ def wrap(old, new, pos="after"): return old(*args, **kwargs) else: return new(_old=old, *args, **kwargs) - return repl + + if decorator is None: + return functools.wraps(repl) + + def decorator_wrapper(f, *args, **kwargs): + return repl(*args, **kwargs) + + return decorator.decorator(decorator_wrapper)(old) diff --git a/requirements.txt b/requirements.txt index cd37c7b9e..ba519212a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,3 +3,4 @@ send2trash httplib2 pyaudio requests +decorator