Esempio n. 1
0
    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)
Esempio n. 2
0
    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