From 0bce72a76a6af0d7b3c731e08393652747e6c53a Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Fri, 23 Sep 2022 19:35:39 -1000 Subject: [PATCH] feat: small speed ups to unmarshall message creation (#27) --- src/dbus_fast/_private/unmarshaller.py | 3 +++ src/dbus_fast/message.py | 3 +++ src/dbus_fast/message_bus.py | 2 +- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/dbus_fast/_private/unmarshaller.py b/src/dbus_fast/_private/unmarshaller.py index 6c5758c..97d7921 100644 --- a/src/dbus_fast/_private/unmarshaller.py +++ b/src/dbus_fast/_private/unmarshaller.py @@ -318,6 +318,9 @@ class Unmarshaller: signature=tree.signature, body=[self.read_argument(t) for t in tree.types] if self.body_len else [], serial=self.serial, + # The D-Bus implementation already validates the message, + # so we don't need to do it again. + validate=False, ) def unmarshall(self): diff --git a/src/dbus_fast/message.py b/src/dbus_fast/message.py index 8d24e32..100bf40 100644 --- a/src/dbus_fast/message.py +++ b/src/dbus_fast/message.py @@ -108,6 +108,7 @@ class Message: signature: str = "", body: List[Any] = [], serial: int = 0, + validate: bool = True, ): self.destination = destination self.path = path @@ -134,6 +135,8 @@ class Message: self.body = body self.serial = serial + if not validate: + return if self.destination is not None: assert_bus_name_valid(self.destination) if self.interface is not None: diff --git a/src/dbus_fast/message_bus.py b/src/dbus_fast/message_bus.py index 4d8da18..287d0ba 100644 --- a/src/dbus_fast/message_bus.py +++ b/src/dbus_fast/message_bus.py @@ -765,10 +765,10 @@ class BaseMessageBus: if msg.message_type == MessageType.SIGNAL: if msg._matches( + member="NameOwnerChanged", # least likely to match sender="org.freedesktop.DBus", path="/org/freedesktop/DBus", interface="org.freedesktop.DBus", - member="NameOwnerChanged", ): [name, old_owner, new_owner] = msg.body if new_owner: