Skip to content
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

Use enum's constructor to resolve enum values #143

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Commits on Nov 17, 2022

  1. Use enum's constructor to resolve enum values

    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
    whot committed Nov 17, 2022
    Configuration menu
    Copy the full SHA
    408ff03 View commit details
    Browse the repository at this point in the history