diff options
Diffstat (limited to 'tutorius/dbustools.py')
-rw-r--r-- | tutorius/dbustools.py | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/tutorius/dbustools.py b/tutorius/dbustools.py index ce28d98..1b685d7 100644 --- a/tutorius/dbustools.py +++ b/tutorius/dbustools.py @@ -1,4 +1,5 @@ import logging +LOGGER = logging.getLogger("sugar.tutorius.dbustools") def save_args(callable, *xargs, **xkwargs): def __call(*args, **kwargs): @@ -9,16 +10,32 @@ def save_args(callable, *xargs, **xkwargs): return __call def ignore(*args): - logging.debug("Unhandled asynchronous dbus call response with arguments: %s", str(args)) + LOGGER.debug("Unhandled asynchronous dbus call response with arguments: %s", str(args)) def logError(error): - logging.error("Unhandled asynchronous dbus call error: %s", error) + LOGGER.error("Unhandled asynchronous dbus call error: %s", error) def remote_call(callable, args, return_cb=None, error_cb=None, block=False): reply_cb = return_cb or ignore errhandler_cb = error_cb or logError if block: - return reply_cb(callable(*args)) + try: + ret_val = callable(*args) + LOGGER.debug("remote_call return arguments: %s", str(ret_val)) + except Exception, e: + #Use the specified error handler even for blocking calls + errhandler_cb(e) + + #Return value signature might be : + if ret_val is None: + #Nothing + return reply_cb() + elif type(ret_val) in (list, tuple): + #Several parameters + return reply_cb(*ret_val) + else: + #One parameter + return reply_cb(ret_val) else: callable(*args, reply_handler=reply_cb, error_handler=errhandler_cb) |