diff --git a/eventlet/api.py b/eventlet/api.py index 75df040..1f31e4d 100644 --- a/eventlet/api.py +++ b/eventlet/api.py @@ -9,6 +9,7 @@ import warnings from eventlet.support import greenlets as greenlet from eventlet.hubs import get_hub as get_hub_, get_default_hub as get_default_hub_, use_hub as use_hub_ from eventlet import greenthread +from eventlet import debug __all__ = [ 'call_after', 'exc_after', 'getcurrent', 'get_default_hub', 'get_hub', @@ -192,59 +193,8 @@ sleep = greenthread.sleep getcurrent = greenlet.getcurrent GreenletExit = greenlet.GreenletExit -class Spew(object): - """ - """ - def __init__(self, trace_names=None, show_values=True): - self.trace_names = trace_names - self.show_values = show_values - - def __call__(self, frame, event, arg): - if event == 'line': - lineno = frame.f_lineno - if '__file__' in frame.f_globals: - filename = frame.f_globals['__file__'] - if (filename.endswith('.pyc') or - filename.endswith('.pyo')): - filename = filename[:-1] - name = frame.f_globals['__name__'] - line = linecache.getline(filename, lineno) - else: - name = '[unknown]' - try: - src = inspect.getsourcelines(frame) - line = src[lineno] - except IOError: - line = 'Unknown code named [%s]. VM instruction #%d' % ( - frame.f_code.co_name, frame.f_lasti) - if self.trace_names is None or name in self.trace_names: - print '%s:%s: %s' % (name, lineno, line.rstrip()) - if not self.show_values: - return self - details = '\t' - tokens = line.translate( - string.maketrans(' ,.()', '\0' * 5)).split('\0') - for tok in tokens: - if tok in frame.f_globals: - details += '%s=%r ' % (tok, frame.f_globals[tok]) - if tok in frame.f_locals: - details += '%s=%r ' % (tok, frame.f_locals[tok]) - if details.strip(): - print details - return self - - -def spew(trace_names=None, show_values=False): - """Install a trace hook which writes incredibly detailed logs - about what code is being executed to stdout. - """ - sys.settrace(Spew(trace_names, show_values)) - - -def unspew(): - """Remove the trace hook installed by spew. - """ - sys.settrace(None) +spew = debug.spew +unspew = debug.unspew def named(name): diff --git a/eventlet/debug.py b/eventlet/debug.py new file mode 100644 index 0000000..8e86eb1 --- /dev/null +++ b/eventlet/debug.py @@ -0,0 +1,59 @@ +"""The debug module contains utilities and functions for better +debugging Eventlet-powered applications.""" + +__all__ = ['spew', 'unspew'] + + +class Spew(object): + """ + """ + def __init__(self, trace_names=None, show_values=True): + self.trace_names = trace_names + self.show_values = show_values + + def __call__(self, frame, event, arg): + if event == 'line': + lineno = frame.f_lineno + if '__file__' in frame.f_globals: + filename = frame.f_globals['__file__'] + if (filename.endswith('.pyc') or + filename.endswith('.pyo')): + filename = filename[:-1] + name = frame.f_globals['__name__'] + line = linecache.getline(filename, lineno) + else: + name = '[unknown]' + try: + src = inspect.getsourcelines(frame) + line = src[lineno] + except IOError: + line = 'Unknown code named [%s]. VM instruction #%d' % ( + frame.f_code.co_name, frame.f_lasti) + if self.trace_names is None or name in self.trace_names: + print '%s:%s: %s' % (name, lineno, line.rstrip()) + if not self.show_values: + return self + details = '\t' + tokens = line.translate( + string.maketrans(' ,.()', '\0' * 5)).split('\0') + for tok in tokens: + if tok in frame.f_globals: + details += '%s=%r ' % (tok, frame.f_globals[tok]) + if tok in frame.f_locals: + details += '%s=%r ' % (tok, frame.f_locals[tok]) + if details.strip(): + print details + return self + + +def spew(trace_names=None, show_values=False): + """Install a trace hook which writes incredibly detailed logs + about what code is being executed to stdout. + """ + sys.settrace(Spew(trace_names, show_values)) + + +def unspew(): + """Remove the trace hook installed by spew. + """ + sys.settrace(None) \ No newline at end of file