Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/tutorius/dbustools.py
diff options
context:
space:
mode:
Diffstat (limited to 'tutorius/dbustools.py')
-rw-r--r--tutorius/dbustools.py23
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)