in test-runner/adapters/rest/rest_decorators.py [0:0]
def log_entry_and_exit(_func=None, *, print_args=True):
"""Print the function signature and return value"""
def decorator_log_entry_and_exit(func):
@functools.wraps(func)
def wrapper_log_entry_and_exit(*args, **kwargs):
if print_args:
args_repr = [repr(a) for a in args]
kwargs_repr = [f"{k}={v!r}" for k, v in kwargs.items()]
signature = ", ".join(args_repr + kwargs_repr)
else:
if len(args) > 0:
signature = repr(args[0]) + ",__ARGUMENTS_REDACTED__"
else:
signature = "__ARGUMENTS_REDACTED__"
if "__self__" in dir(func):
func_name = func.__self__.__class__.__name__ + "." + func.__name__
elif len(args) > 0:
func_name = args[0].__class__.__name__ + "." + func.__name__
else:
func_name = func.__name__
adapter_config.logger(f"Callng {func_name!r}({signature})")
try:
value = func(*args, **kwargs)
except Exception as e:
adapter_config.logger("Function {} raised {}".format(func_name, e))
raise
adapter_config.logger(f"{func_name!r} returned {value!r}")
return value
return wrapper_log_entry_and_exit
if _func is None:
return decorator_log_entry_and_exit
else:
return decorator_log_entry_and_exit(_func)