-
Notifications
You must be signed in to change notification settings - Fork 59
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Regression: no more introspection after "Improve unmarshall performance" #142
Comments
whot
added a commit
to whot/python-dbus-next
that referenced
this issue
Nov 17, 2022
Rather than creating a map of {value: enum}, let's just use Foo(value) to resolve to the respective enum value. This fixes a regression with introspection introduced in commit 3282eed "Improve unmarshall performance": File "dbus_next/_private/unmarshaller.py", line 247, in _read_header self.flag = MESSAGE_FLAG_MAP[buffer[2]] ~~~~~~~~~~~~~~~~^^^^^^^^^^^ KeyError: 0 MESSAGE_FLAG_MAP is built like this: MESSAGE_FLAG_MAP = {field.value: field for field in MessageFlag} But MessageFlag is a IntFlag, so the zero value (NONE) is missing from the iterator: >>> [f for f in dbus_next.constants.MessageFlag] [<MessageFlag.NO_REPLY_EXPECTED: 1>, <MessageFlag.NO_AUTOSTART: 2>, <MessageFlag.ALLOW_INTERACTIVE_AUTHORIZATION: 4>] Resolving the enum through the constructor fixes this. MESSAGE_TYPE_MAP and HEADER_NAME_MAP are changed in solidarity. Fixes altdesktop#142
garyvdm
pushed a commit
to garyvdm/dbus-ezy
that referenced
this issue
May 9, 2024
Rather than creating a map of {value: enum}, let's just use Foo(value) to resolve to the respective enum value. This fixes a regression with introspection introduced in commit 3282eed "Improve unmarshall performance": File "dbus_next/_private/unmarshaller.py", line 247, in _read_header self.flag = MESSAGE_FLAG_MAP[buffer[2]] ~~~~~~~~~~~~~~~~^^^^^^^^^^^ KeyError: 0 MESSAGE_FLAG_MAP is built like this: MESSAGE_FLAG_MAP = {field.value: field for field in MessageFlag} But MessageFlag is a IntFlag, so the zero value (NONE) is missing from the iterator: >>> [f for f in dbus_next.constants.MessageFlag] [<MessageFlag.NO_REPLY_EXPECTED: 1>, <MessageFlag.NO_AUTOSTART: 2>, <MessageFlag.ALLOW_INTERACTIVE_AUTHORIZATION: 4>] Resolving the enum through the constructor fixes this. MESSAGE_TYPE_MAP and HEADER_NAME_MAP are changed in solidarity. Fixes altdesktop#142
garyvdm
pushed a commit
to garyvdm/dbus-ezy
that referenced
this issue
May 10, 2024
Rather than creating a map of {value: enum}, let's just use Foo(value) to resolve to the respective enum value. This fixes a regression with introspection introduced in commit 3282eed "Improve unmarshall performance": File "dbus_next/_private/unmarshaller.py", line 247, in _read_header self.flag = MESSAGE_FLAG_MAP[buffer[2]] ~~~~~~~~~~~~~~~~^^^^^^^^^^^ KeyError: 0 MESSAGE_FLAG_MAP is built like this: MESSAGE_FLAG_MAP = {field.value: field for field in MessageFlag} But MessageFlag is a IntFlag, so the zero value (NONE) is missing from the iterator: >>> [f for f in dbus_next.constants.MessageFlag] [<MessageFlag.NO_REPLY_EXPECTED: 1>, <MessageFlag.NO_AUTOSTART: 2>, <MessageFlag.ALLOW_INTERACTIVE_AUTHORIZATION: 4>] Resolving the enum through the constructor fixes this. MESSAGE_TYPE_MAP and HEADER_NAME_MAP are changed in solidarity. Fixes altdesktop#142
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Commit "Improve unmarshall performance" (3282eed) broke the introspection abilities. Trying to introspect now simply gives
Remote peer disconnected
.Can be reproduced with the example high level service from the docs or this GLib based one:
To trigger the error, run this command:
In the GLib case it fails quietly with no error, the asyncio case returns this traceback:
The text was updated successfully, but these errors were encountered: