diff options
author | Florian Bruhin <me@the-compiler.org> | 2021-04-08 09:51:16 +0200 |
---|---|---|
committer | Florian Bruhin <me@the-compiler.org> | 2021-04-08 09:51:16 +0200 |
commit | e2c5fe6262564d9d85806bfa9d4486a411cf5045 (patch) | |
tree | 21602b102bd37a5d46edff1c98cd531d09c7390e /qutebrowser | |
parent | e0657a550a80876c6236bc065593b01ef098f18c (diff) | |
download | qutebrowser-e2c5fe6262564d9d85806bfa9d4486a411cf5045.tar.gz qutebrowser-e2c5fe6262564d9d85806bfa9d4486a411cf5045.zip |
Fix enum stringification for Python 3.10 a7+
https://bugs.python.org/issue40066
https://mail.python.org/archives/list/python-dev@python.org/message/CHQW6THTDYNPPFWQ2KDDTUYSAJDCZFNP/
https://github.com/python/cpython/commit/b775106d940e3d77c8af7967545bb9a5b7b162df
Diffstat (limited to 'qutebrowser')
-rw-r--r-- | qutebrowser/browser/browsertab.py | 4 | ||||
-rw-r--r-- | qutebrowser/browser/webengine/webenginetab.py | 2 | ||||
-rw-r--r-- | qutebrowser/keyinput/modeman.py | 10 | ||||
-rw-r--r-- | qutebrowser/utils/utils.py | 20 |
4 files changed, 28 insertions, 8 deletions
diff --git a/qutebrowser/browser/browsertab.py b/qutebrowser/browser/browsertab.py index cc358a810..cbe698009 100644 --- a/qutebrowser/browser/browsertab.py +++ b/qutebrowser/browser/browsertab.py @@ -1003,7 +1003,7 @@ class AbstractTab(QWidget): """Setter for load_status.""" if not isinstance(val, usertypes.LoadStatus): raise TypeError("Type {} is no LoadStatus member!".format(val)) - log.webview.debug("load status for {}: {}".format(repr(self), val)) + log.webview.debug(f"load status for {self!r}: {utils.pyenum_str(val)}") self._load_status = val self.load_status_changed.emit(val) @@ -1063,7 +1063,7 @@ class AbstractTab(QWidget): url = utils.elide(navigation.url.toDisplayString(), 100) log.webview.debug("navigation request: url {}, type {}, is_main_frame " "{}".format(url, - navigation.navigation_type, + utils.pyenum_str(navigation.navigation_type), navigation.is_main_frame)) if navigation.is_main_frame: diff --git a/qutebrowser/browser/webengine/webenginetab.py b/qutebrowser/browser/webengine/webenginetab.py index 754b764cb..c03e94408 100644 --- a/qutebrowser/browser/webengine/webenginetab.py +++ b/qutebrowser/browser/webengine/webenginetab.py @@ -464,7 +464,7 @@ class WebEngineCaret(browsertab.AbstractCaret): # `:selection-toggle` is executed and before this callback function # is asynchronously called. log.misc.debug("Ignoring caret selection callback in {}".format( - self._mode_manager.mode)) + utils.pyenum_str(self._mode_manager.mode))) return if state_str is None: message.error("Error toggling caret selection") diff --git a/qutebrowser/keyinput/modeman.py b/qutebrowser/keyinput/modeman.py index 3c47fafe3..21a6be052 100644 --- a/qutebrowser/keyinput/modeman.py +++ b/qutebrowser/keyinput/modeman.py @@ -284,8 +284,8 @@ class ModeManager(QObject): curmode = self.mode parser = self.parsers[curmode] if curmode != usertypes.KeyMode.insert: - log.modes.debug("got keypress in mode {} - delegating to " - "{}".format(curmode, utils.qualname(parser))) + log.modes.debug("got keypress in mode {} - delegating to {}".format( + utils.pyenum_str(curmode), utils.qualname(parser))) match = parser.handle(event, dry_run=dry_run) has_modifier = event.modifiers() not in [ @@ -361,7 +361,8 @@ class ModeManager(QObject): return log.modes.debug("Entering mode {}{}".format( - mode, '' if reason is None else ' (reason: {})'.format(reason))) + utils.pyenum_str(mode), + '' if reason is None else ' (reason: {})'.format(reason))) if mode not in self.parsers: raise ValueError("No keyparser for mode {}".format(mode)) if self.mode == mode or (self.mode in PROMPT_MODES and @@ -429,7 +430,8 @@ class ModeManager(QObject): raise NotInModeError("Not in mode {}!".format(mode)) log.modes.debug("Leaving mode {}{}".format( - mode, '' if reason is None else ' (reason: {})'.format(reason))) + utils.pyenum_str(mode), + '' if reason is None else ' (reason: {})'.format(reason))) # leaving a mode implies clearing keychain, see # https://github.com/qutebrowser/qutebrowser/issues/1805 self.clear_keychain() diff --git a/qutebrowser/utils/utils.py b/qutebrowser/utils/utils.py index 762d2d370..56ebe45c4 100644 --- a/qutebrowser/utils/utils.py +++ b/qutebrowser/utils/utils.py @@ -375,6 +375,18 @@ def is_enum(obj: Any) -> bool: return False +def pyenum_str(value: enum.Enum) -> str: + """Get a string representation of a Python enum value. + + This will have the form of "EnumType.membername", which is the default string + representation for Python up to 3.10. Unfortunately, that changes with Python 3.10: + https://bugs.python.org/issue40066 + """ + if sys.version_info[:2] >= (3, 10): + return repr(value) + return str(value) + + def get_repr(obj: Any, constructor: bool = False, **attrs: Any) -> str: """Get a suitable __repr__ string for an object. @@ -387,8 +399,14 @@ def get_repr(obj: Any, constructor: bool = False, **attrs: Any) -> str: cls = qualname(obj.__class__) parts = [] items = sorted(attrs.items()) + for name, val in items: - parts.append('{}={!r}'.format(name, val)) + if isinstance(val, enum.Enum): + s = pyenum_str(val) + else: + s = repr(val) + parts.append(f'{name}={s}') + if constructor: return '{}({})'.format(cls, ', '.join(parts)) else: |