def patch(obj, func_name, before_func, after_func):
if not hasattr(obj, func_name):
return
target_func = getattr(obj, func_name)
# already patched
if hasattr(target_func, '__stackimpact_orig__'):
return
@wraps(target_func)
def wrapper(*args, **kwds):
if before_func:
before_func(*args, **kwds)
ret = target_func(*args, **kwds)
if after_func:
after_func(ret)
return ret
wrapper.__orig__ = target_func
setattr(obj, func_name, wrapper)
评论列表
文章目录