Exemplo n.º 1
0
 def __init__(self, msg: QDBusMessage) -> None:
     assert msg.type() == QDBusMessage.ErrorMessage
     self.error = msg.errorName()
     self.error_message = msg.errorMessage()
     self.is_fatal = self.error not in self._NON_FATAL_ERRORS
     text = f"{self.error}: {self.error_message}"
     super().__init__(text)
Exemplo n.º 2
0
    def _verify_message(
        self,
        msg: QDBusMessage,
        expected_signature: str,
        expected_type: QDBusMessage.MessageType,
    ) -> None:
        """Check the signature/type of a received message.

        Raises DBusError if the signature doesn't match.
        """
        assert expected_type not in [
            QDBusMessage.ErrorMessage,
            QDBusMessage.InvalidMessage,
        ], expected_type

        if msg.type() == QDBusMessage.ErrorMessage:
            err = msg.errorName()
            if err == "org.freedesktop.DBus.Error.NoReply":
                self.error.emit(
                    msg.errorMessage())  # notification daemon is gone
                return

            raise Error(f"Got DBus error: {err} - {msg.errorMessage()}")

        signature = msg.signature()
        if signature != expected_signature:
            raise Error(
                f"Got a message with signature {signature} but expected "
                f"{expected_signature} (args: {msg.arguments()})")

        typ = msg.type()
        if typ != expected_type:
            type_str = debug.qenum_key(QDBusMessage.MessageType, typ)
            expected_type_str = debug.qenum_key(QDBusMessage.MessageType,
                                                expected_type)
            raise Error(
                f"Got a message of type {type_str} but expected {expected_type_str}"
                f"(args: {msg.arguments()})")