Adding indentation to traces
[theonering] / src / gtk_toolbox.py
index c4203b0..09ce9fe 100644 (file)
@@ -213,7 +213,7 @@ def safecall(f, errorDisplay=None, default=None, exception=Exception):
        '''
        def _safecall(*args, **argv):
                try:
-                       return f(*args,**argv)
+                       return f(*args, **argv)
                except exception, e:
                        if errorDisplay is not None:
                                errorDisplay.push_exception(e)
@@ -221,6 +221,23 @@ def safecall(f, errorDisplay=None, default=None, exception=Exception):
        return _safecall
 
 
+def log_call(logger):
+
+       def log_call_decorator(func):
+
+               @functools.wraps(func)
+               def wrapper(*args, **kwds):
+                       _moduleLogger.info("-> %s" % (func.__name__, ))
+                       try:
+                               return func(*args, **kwds)
+                       finally:
+                               _moduleLogger.info("<- %s" % (func.__name__, ))
+
+               return wrapper
+
+       return log_call_decorator
+
+
 def log_exception(logger):
 
        def log_exception_decorator(func):
@@ -236,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