diff options
author | Charlie <charlie@tutorius-dev.(none)> | 2009-10-25 01:18:10 (GMT) |
---|---|---|
committer | Charlie <charlie@tutorius-dev.(none)> | 2009-10-25 01:18:10 (GMT) |
commit | 48ba2db44bb2054222cad3aca3e027e24c51c090 (patch) | |
tree | 13a25552db428a3a97e22e09f7936c4a988f11cf /tutorius/dbustools.py | |
parent | 2b4eaea8f46e846799595b3c7015f77c6156532b (diff) | |
parent | aa4868af13437f4718e8ce7972b79b496d296068 (diff) |
Merge branch 'demo' into activity
Diffstat (limited to 'tutorius/dbustools.py')
-rw-r--r-- | tutorius/dbustools.py | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/tutorius/dbustools.py b/tutorius/dbustools.py new file mode 100644 index 0000000..1b685d7 --- /dev/null +++ b/tutorius/dbustools.py @@ -0,0 +1,41 @@ +import logging +LOGGER = logging.getLogger("sugar.tutorius.dbustools") + +def save_args(callable, *xargs, **xkwargs): + def __call(*args, **kwargs): + kw = dict() + kw.update(kwargs) + kw.update(xkwargs) + return callable(*(xargs+args), **kw) + return __call + +def ignore(*args): + LOGGER.debug("Unhandled asynchronous dbus call response with arguments: %s", str(args)) + +def logError(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: + 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) + |