| @@ -55,34 +55,34 @@ from contextlib import contextmanager | |||||
| Str = type(u'') | Str = type(u'') | ||||
| def inline_args(f): | |||||
| # print '@@', f.__name__, type(f), isinstance(f, types.FunctionType), isinstance(f, types.TypeType), isinstance(f, types.BuiltinFunctionType) | |||||
| def smart_decorator(f, create_decorator): | |||||
| if isinstance(f, types.FunctionType): | if isinstance(f, types.FunctionType): | ||||
| @functools.wraps(f) | |||||
| def _f_func(self, args): | |||||
| return f(self, *args) | |||||
| return _f_func | |||||
| return functools.wraps(create_decorator(f, True)) | |||||
| elif isinstance(f, (type, types.BuiltinFunctionType)): | elif isinstance(f, (type, types.BuiltinFunctionType)): | ||||
| @functools.wraps(f) | |||||
| def _f_builtin(_self, args): | |||||
| return f(*args) | |||||
| return _f_builtin | |||||
| return functools.wraps(create_decorator(f, False)) | |||||
| elif isinstance(f, types.MethodType): | elif isinstance(f, types.MethodType): | ||||
| @functools.wraps(f.__func__) | |||||
| def _f(self, args): | |||||
| return f.__func__(self, *args) | |||||
| return _f | |||||
| return functools.wraps(create_decorator(f.__func__, True)) | |||||
| elif isinstance(f, functools.partial): | elif isinstance(f, functools.partial): | ||||
| # wraps does not work for partials in 2.7: https://bugs.python.org/issue3445 | # wraps does not work for partials in 2.7: https://bugs.python.org/issue3445 | ||||
| # @functools.wraps(f) | |||||
| def _f(self, args): | |||||
| return f(*args) | |||||
| return _f | |||||
| return create_decorator(f.__func__, True) | |||||
| else: | else: | ||||
| @functools.wraps(f.__call__.__func__) | |||||
| def _f(self, args): | |||||
| return f.__call__.__func__(self, *args) | |||||
| return _f | |||||
| return create_decorator(f.__func__.__call__, True) | |||||
| def inline_args(f): | |||||
| def create_decorator(_f, with_self): | |||||
| if with_self: | |||||
| def f(self, args): | |||||
| return _f(self, *args) | |||||
| else: | |||||
| def f(args): | |||||
| return _f(*args) | |||||
| return smart_decorator(f, create_decorator) | |||||
| try: | try: | ||||