Adding indentation to traces
[theonering] / src / gtk_toolbox.py
index db6c544..09ce9fe 100644 (file)
@@ -253,3 +253,28 @@ def log_exception(logger):
                return wrapper
 
        return log_exception_decorator
+
+
+_indentationLevel = [0]
+
+
+def trace(logger):
+
+       def trace_decorator(func):
+
+               @functools.wraps(func)
+               def wrapper(*args, **kwds):
+                       try:
+                               logger.debug("%s> %s" % (" " * _indentationLevel[0], func.__name__, ))
+                               _indentationLevel[0] += 1
+                               return func(*args, **kwds)
+                       except Exception:
+                               logger.exception(func.__name__)
+                               raise
+                       finally:
+                               _indentationLevel[0] -= 1
+                               logger.debug("%s< %s" % (" " * _indentationLevel[0], func.__name__, ))
+
+               return wrapper
+
+       return trace_decorator