home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.6)
-
- __all__ = [
- 'decorator',
- 'update_wrapper',
- 'getinfo']
- import inspect
- import sys
-
- def getinfo(func):
- (regargs, varargs, varkwargs, defaults) = inspect.getargspec(func)
- argnames = list(regargs)
- if varargs:
- argnames.append(varargs)
-
- if varkwargs:
- argnames.append(varkwargs)
-
- signature = inspect.formatargspec(regargs, varargs, varkwargs, defaults, formatvalue = (lambda value: ''))[1:-1]
- return dict(name = func.__name__, argnames = argnames, signature = signature, defaults = func.func_defaults, doc = func.__doc__, module = func.__module__, dict = func.__dict__, globals = func.func_globals, closure = func.func_closure)
-
-
- def update_wrapper(wrapper, wrapped, create = False):
- if isinstance(wrapped, dict):
- infodict = wrapped
- else:
- infodict = getinfo(wrapped)
- if create:
- src = 'lambda %(signature)s: _wrapper_(%(signature)s)' % infodict
- wrapper = eval(src, dict(_wrapper_ = wrapper))
-
-
- try:
- wrapper.__name__ = infodict['name']
- except:
- pass
-
- wrapper.__doc__ = infodict['doc']
- wrapper.__module__ = infodict['module']
- wrapper.__dict__.update(infodict['dict'])
- wrapper.func_defaults = infodict['defaults']
- return wrapper
-
-
- def _decorator(caller, func):
- infodict = getinfo(func)
- argnames = infodict['argnames']
- src = 'lambda %(signature)s: _call_(_func_, %(signature)s)' % infodict
- dec_func = eval(src, dict(_func_ = func, _call_ = caller))
- return update_wrapper(dec_func, func)
-
-
- def decorator(caller, func = None):
- if func is None:
- return (update_wrapper,)((lambda f: _decorator(caller, f)), caller)
- return _decorator(caller, func)
-
- if __name__ == '__main__':
- import doctest
- doctest.testmod()
-
-