Message 211585 - Python tracker (original) (raw)

OK well, let me just note what the issue is, and I think this is pretty backwards-incompatible, and additionally I really can't find any reasonable way of working around it except for just deleting wrapped. It would be nice if there were some recipe or documentation that could point people to how do do the following pattern:

import functools import inspect

def my_wrapper(fn): def wrapped(x, y, z): return my_func(x, y) wrapped = functools.update_wrapper(wrapped, fn) return wrapped

def my_func(x, y): pass

wrapper = my_wrapper(my_func)

passes for 2.6 - 3.3, fails on 3.4

assert inspect.getargspec(wrapper) == (['x', 'y', 'z'], None, None, None), inspect.getargspec(wrapper)

basically in Alembic we copy out a bunch of decorated functions out somewhere else using inspect(), and that code relies upon seeing the wrappers list of arguments, not the wrapped. Not that Python 3.4's behavior isn't correct now, but this seems like something that might be somewhat common.