X-Git-Url: http://git.maemo.org/git/?p=theonering;a=blobdiff_plain;f=src%2Fgtk_toolbox.py;h=888906927180fb962a1285a77c20df6f57899f8a;hp=da9accc036a7a70f244027fe5aa6e9f0b2d1f6c8;hb=dba615444b6e0d9a1773478a0acc0ce58fc5eeeb;hpb=2450afba114062fed8b28e2933c7a4747e71450e diff --git a/src/gtk_toolbox.py b/src/gtk_toolbox.py index da9accc..8889069 100644 --- a/src/gtk_toolbox.py +++ b/src/gtk_toolbox.py @@ -12,6 +12,9 @@ import threading import Queue +_moduleLogger = logging.getLogger("gtk_toolbox") + + @contextlib.contextmanager def flock(path, timeout=-1): WAIT_FOREVER = -1 @@ -137,7 +140,7 @@ def comap(function, target): mappedItem = function(*item) target.send(mappedItem) except Exception, e: - logging.exception("Forwarding exception!") + _moduleLogger.exception("Forwarding exception!") target.throw(e.__class__, str(e)) @@ -210,9 +213,63 @@ 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) return default 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): + + @functools.wraps(func) + def wrapper(*args, **kwds): + try: + return func(*args, **kwds) + except Exception: + logger.exception(func.__name__) + raise + + return wrapper + + return log_exception_decorator + + +def trace(logger): + + def trace_decorator(func): + + @functools.wraps(func) + def wrapper(*args, **kwds): + try: + logger.info("> %s" % (func.__name__, )) + return func(*args, **kwds) + except Exception: + logger.exception(func.__name__) + raise + finally: + logger.info("< %s" % (func.__name__, )) + + return wrapper + + return trace_decorator