Skip to content

Conversation

@whot
Copy link
Contributor

@whot whot commented 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 #142

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Regression: no more introspection after "Improve unmarshall performance"

1 participant