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.
Rather than creating a map of
{value: enum}
, let's just useFoo(value)
to resolve to the respective enum value.This fixes a regression with introspection introduced in commit 3282eed "Improve unmarshall performance":
MESSAGE_FLAG_MAP is built like this:
But MessageFlag is a IntFlag, so the zero value (NONE) is missing from the iterator:
Resolving the enum through the constructor fixes this. MESSAGE_TYPE_MAP and HEADER_NAME_MAP are changed in solidarity.
Fixes #142