From d771bcf6a2ed08486affe0e2c30bd8dd95ccbb5d Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 1 Aug 2023 10:00:46 -1000 Subject: [PATCH] fix: exception handler failure when exception is not DBusError (#215) --- src/dbus_fast/message_bus.py | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/dbus_fast/message_bus.py b/src/dbus_fast/message_bus.py index 73a9d9a..1f648fd 100644 --- a/src/dbus_fast/message_bus.py +++ b/src/dbus_fast/message_bus.py @@ -29,8 +29,10 @@ MESSAGE_TYPE_CALL = MessageType.METHOD_CALL MESSAGE_TYPE_SIGNAL = MessageType.SIGNAL NO_REPLY_EXPECTED_VALUE = MessageFlag.NO_REPLY_EXPECTED.value +_Message = Message -def _expects_reply(msg) -> bool: + +def _expects_reply(msg: _Message) -> bool: return not (msg.flags.value & NO_REPLY_EXPECTED_VALUE) @@ -57,23 +59,21 @@ class SendReply: exc_value: Optional[Exception], tb: Optional[TracebackType], ) -> bool: - if exc_type is None: - return False - - if issubclass(exc_type, DBusError): - self(exc_value._as_message(self._msg)) # type: ignore[union-attr] - return True - - if issubclass(exc_type, Exception): - self( - Message.new_error( - self._msg, - ErrorType.SERVICE_ERROR, - f"The service interface raised an error: {exc_value}.\n{traceback.format_tb(tb)}", + if exc_value: + if isinstance(exc_value, DBusError): + self(exc_value._as_message(self._msg)) + else: + self( + Message.new_error( + self._msg, + ErrorType.SERVICE_ERROR, + f"The service interface raised an error: {exc_value}.\n{traceback.format_tb(tb)}", + ) ) - ) return True + return False + def __exit__( self, exc_type: Optional[Type[Exception]], @@ -804,7 +804,7 @@ class BaseMessageBus: ErrorType.INTERNAL_ERROR, "invalid message type for method call", msg ) - def _process_message(self, msg) -> None: + def _process_message(self, msg: _Message) -> None: handled = False for user_handler in self._user_message_handlers: try: