diff options
author | Florian Bruhin <me@the-compiler.org> | 2023-06-13 19:56:21 +0200 |
---|---|---|
committer | Florian Bruhin <me@the-compiler.org> | 2023-06-13 19:56:21 +0200 |
commit | ca4cd3a24ff7bdb2e2fa18e0905e90c673222185 (patch) | |
tree | 56c6fb8e676d5b23fb0ed2fd5a390ec718361079 | |
parent | 92243041c24b23178d4d0c860d52bc442490d291 (diff) | |
download | qutebrowser-ca4cd3a24ff7bdb2e2fa18e0905e90c673222185.tar.gz qutebrowser-ca4cd3a24ff7bdb2e2fa18e0905e90c673222185.zip |
qt: Refactor SelectionInfo.set_module_error
-rw-r--r-- | qutebrowser/qt/machinery.py | 16 | ||||
-rw-r--r-- | tests/unit/test_qt_machinery.py | 15 |
2 files changed, 23 insertions, 8 deletions
diff --git a/qutebrowser/qt/machinery.py b/qutebrowser/qt/machinery.py index 3ed90f27d..2b8de8f64 100644 --- a/qutebrowser/qt/machinery.py +++ b/qutebrowser/qt/machinery.py @@ -91,9 +91,14 @@ class SelectionInfo: wrapper: Optional[str] = None reason: SelectionReason = SelectionReason.unknown - def set_module(self, name: str, outcome: str) -> None: + def set_module_error(self, name: str, error: Exception) -> None: """Set the outcome for a module import.""" - setattr(self, name.lower(), outcome) + setattr(self, name.lower(), f"{type(error).__name__}: {error}") + + def use_wrapper(self, wrapper: str) -> None: + """Set the wrapper to use.""" + self.wrapper = wrapper + setattr(self, wrapper.lower(), "success") def __str__(self) -> str: if self.pyqt5 is None and self.pyqt6 is None: @@ -126,16 +131,15 @@ def _autoselect_wrapper() -> SelectionInfo: importlib.import_module(wrapper) except ModuleNotFoundError as e: # Wrapper not available -> try the next one. - info.set_module(wrapper, f"{type(e).__name__}: {e}") + info.set_module_error(wrapper, e) continue except ImportError as e: # Any other ImportError -> stop to surface the error. - info.set_module(wrapper, f"{type(e).__name__}: {e}") + info.set_module_error(wrapper, e) break # Wrapper imported successfully -> use it. - info.set_module(wrapper, "success") - info.wrapper = wrapper + info.use_wrapper(wrapper) return info # SelectionInfo with wrapper=None but all error reports diff --git a/tests/unit/test_qt_machinery.py b/tests/unit/test_qt_machinery.py index ed1e53aa7..386081f5d 100644 --- a/tests/unit/test_qt_machinery.py +++ b/tests/unit/test_qt_machinery.py @@ -68,9 +68,9 @@ def test_importerror_exceptions(exception: Exception): raise exception -def test_selectioninfo_set_module(): +def test_selectioninfo_set_module_error(): info = machinery.SelectionInfo() - info.set_module("PyQt5", "ImportError: Python imploded") + info.set_module_error("PyQt5", ImportError("Python imploded")) assert info == machinery.SelectionInfo( wrapper=None, reason=machinery.SelectionReason.unknown, @@ -79,6 +79,17 @@ def test_selectioninfo_set_module(): ) +def test_selectioninfo_use_wrapper(): + info = machinery.SelectionInfo() + info.use_wrapper("PyQt6") + assert info == machinery.SelectionInfo( + wrapper="PyQt6", + reason=machinery.SelectionReason.unknown, + pyqt5=None, + pyqt6="success", + ) + + @pytest.mark.parametrize( "info, expected", [ |