def call_method(self, method, *args, **kwargs): """Call method with *args and **kwargs over dbus.""" msg = MethodCallMessage(self.destination, self.path, self.interface, method) msg.set_no_reply(True) # get the signature signature = kwargs.get('signature', None) if signature is not None: msg.append(signature=signature, *args) else: msg.append(*args) #gbet the reply/error handlers reply_handler = kwargs.get('reply_handler', None) error_handler = kwargs.get('error_handler', None) assert error_handler != None def parse_reply(message): """Handle the reply message.""" if isinstance(message, ErrorMessage): return error_handler(DBusException( name=message.get_error_name(), *message.get_args_list())) args_list = message.get_args_list(utf8_strings=False, byte_arrays=False) if reply_handler: if len(args_list) == 0: reply_handler(None) elif len(args_list) == 1: return reply_handler(args_list[0]) else: return reply_handler(tuple(args_list)) return self.bus.send_message_with_reply(msg, reply_handler=parse_reply)
def call_method(self, method, *args, **kwargs): """Call method with *args and **kwargs over dbus.""" msg = MethodCallMessage(self.destination, self.path, self.interface, method) msg.set_no_reply(True) # get the signature signature = kwargs.get('signature', None) if signature is not None: msg.append(signature=signature, *args) else: msg.append(*args) d = defer.Deferred() def reply_handler(result): """Callback the returned deferred and call 'reply_handler'.""" kwargs.get('reply_handler', lambda _: None)(result) d.callback(result) def error_handler(error): """Errback the returned deferred and call 'error_handler'.""" kwargs.get('error_handler', lambda _: None)(error) d.errback(error) def parse_reply(message): """Handle the reply message.""" if isinstance(message, ErrorMessage): exc = IPCError(name=message.get_error_name(), info=message.get_args_list()) return error_handler(exc) args_list = message.get_args_list(utf8_strings=False, byte_arrays=False) if len(args_list) == 0: reply_handler(None) elif len(args_list) == 1: reply_handler(args_list[0]) else: reply_handler(tuple(args_list)) self.bus.send_message_with_reply(msg, reply_handler=parse_reply) return d