Created
December 1, 2020 11:24
-
-
Save andreycizov/ed3b464ec3c7bdbf9f5c98a972ee865b to your computer and use it in GitHub Desktop.
Python log the lines which returned the value in a callable
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def trace_return(pretty_printer): | |
def decorator(fun): | |
def decorated(*args, **kwargs): | |
import sys | |
import inspect | |
last_line = None | |
entered = False | |
def tracer(frame, event, arg=None): | |
nonlocal last_line | |
nonlocal entered | |
if event == 'call': | |
if not entered: | |
entered = True | |
return tracer | |
else: | |
return None | |
elif event == 'line': | |
frame_info = inspect.getframeinfo(frame) | |
last_line = (frame_info.filename, frame_info.lineno) | |
return tracer | |
elif event == 'return': | |
return | |
elif event == 'exception': | |
return tracer | |
else: | |
raise NotImplementedError(repr(event)) | |
old_tracer = sys.gettrace() | |
sys.settrace(tracer) | |
rtn = fun(*args, **kwargs) | |
sys.settrace(old_tracer) | |
import pprint | |
pprint.pprint([ | |
fun.__name__, | |
pretty_printer(args, kwargs, rtn), | |
last_line | |
]) | |
return rtn | |
return decorated | |
return decorator | |
@trace_return(lambda @trace_return(lambda args, kwargs, rtn: [kwargs['date'], rtn]) | |
def fun(date): | |
return date |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment