diff options
author | Vincent Vinet <vince.vinet@gmail.com> | 2009-10-19 20:15:41 (GMT) |
---|---|---|
committer | Vincent Vinet <vince.vinet@gmail.com> | 2009-10-19 20:15:41 (GMT) |
commit | 912528253fcf1fc43c1a2d02ffe6e540fe60d8e7 (patch) | |
tree | 1d5c075046d260580c9eeb27d0d7d09045a7d4b5 /tutorius/dbustools.py | |
parent | 6584510d390a37153c20974da6704a907058fea0 (diff) |
Merge the TProbe Integration and fix merging induced bugs
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) + |