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)
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()})")