diff options
author | Florian Bruhin <me@the-compiler.org> | 2022-05-17 13:19:40 +0200 |
---|---|---|
committer | Florian Bruhin <me@the-compiler.org> | 2022-06-22 17:41:12 +0200 |
commit | e17001ba92b6c992ed2f618726641a1a9f424ec1 (patch) | |
tree | 7d8f9ea4eb19cfe086a4bdf088eb67e418daa483 | |
parent | a0b5da42462dfa8b8ab830919c35d46d10647134 (diff) | |
download | qutebrowser-e17001ba92b6c992ed2f618726641a1a9f424ec1.tar.gz qutebrowser-e17001ba92b6c992ed2f618726641a1a9f424ec1.zip |
lint: Split up debug.qenum_key
-rw-r--r-- | qutebrowser/utils/debug.py | 69 |
1 files changed, 47 insertions, 22 deletions
diff --git a/qutebrowser/utils/debug.py b/qutebrowser/utils/debug.py index 02ec72d88..ff6c3b9c2 100644 --- a/qutebrowser/utils/debug.py +++ b/qutebrowser/utils/debug.py @@ -102,31 +102,15 @@ def log_signals(obj: QObject) -> QObject: _EnumValueType = Union[sip.simplewrapper, int] -def qenum_key(base: Type[_EnumValueType], - value: _EnumValueType, - klass: Type[_EnumValueType] = None) -> str: - """Convert a Qt Enum value to its key as a string. - - Args: - base: The object the enum is in, e.g. QFrame. - value: The value to get. - klass: The enum class the value belongs to. - If None, the class will be auto-guessed. - - Return: - The key associated with the value as a string if it could be found. - The original value as a string if not. - """ - if klass is None: - klass = value.__class__ - if klass == int: - raise TypeError("Can't guess enum class of an int!") - - # New-style PyQt6: Try getting value from Python enum +def _qenum_key_python( + value: _EnumValueType, + klass: Type[_EnumValueType] = None, +) -> Optional[str]: + """New-style PyQt6: Try getting value from Python enum.""" if isinstance(value, enum.Enum) and value.name: return value.name - # PyQt6, but we got an int with klass passed: Try asking Python enum for member + # We got an int with klass passed: Try asking Python enum for member if issubclass(klass, enum.Enum): try: name = klass(value).name @@ -135,6 +119,14 @@ def qenum_key(base: Type[_EnumValueType], except ValueError: pass + return None + + +def _qenum_key_qt( + base: Type[_EnumValueType], + value: _EnumValueType, + klass: Type[_EnumValueType] = None, +) -> Optional[str]: # On PyQt5, or PyQt6 with int passed: Try to ask Qt's introspection. # However, not every Qt enum value has a staticMetaObject try: @@ -152,6 +144,39 @@ def qenum_key(base: Type[_EnumValueType], if isinstance(obj, klass) and obj == value: return name + return None + + +def qenum_key( + base: Type[_EnumValueType], + value: _EnumValueType, + klass: Type[_EnumValueType] = None, +) -> str: + """Convert a Qt Enum value to its key as a string. + + Args: + base: The object the enum is in, e.g. QFrame. + value: The value to get. + klass: The enum class the value belongs to. + If None, the class will be auto-guessed. + + Return: + The key associated with the value as a string if it could be found. + The original value as a string if not. + """ + if klass is None: + klass = value.__class__ + if klass == int: + raise TypeError("Can't guess enum class of an int!") + + name = _qenum_key_python(value=value, klass=klass) + if name is not None: + return name + + name = _qenum_key_qt(base=base, value=value, klass=klass) + if name is not None: + return name + # Last resort fallback: Hex value return '0x{:04x}'.format(int(value)) # type: ignore[arg-type] |