apply functools.wraps() to wrapper functions