From ca4cd3a24ff7bdb2e2fa18e0905e90c673222185 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Tue, 13 Jun 2023 19:56:21 +0200 Subject: qt: Refactor SelectionInfo.set_module_error --- qutebrowser/qt/machinery.py | 16 ++++++++++------ 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", [ -- cgit v1.2.3-54-g00ecf