summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Bruhin <me@the-compiler.org>2023-06-13 19:56:21 +0200
committerFlorian Bruhin <me@the-compiler.org>2023-06-13 19:56:21 +0200
commitca4cd3a24ff7bdb2e2fa18e0905e90c673222185 (patch)
tree56c6fb8e676d5b23fb0ed2fd5a390ec718361079
parent92243041c24b23178d4d0c860d52bc442490d291 (diff)
downloadqutebrowser-ca4cd3a24ff7bdb2e2fa18e0905e90c673222185.tar.gz
qutebrowser-ca4cd3a24ff7bdb2e2fa18e0905e90c673222185.zip
qt: Refactor SelectionInfo.set_module_error
-rw-r--r--qutebrowser/qt/machinery.py16
-rw-r--r--tests/unit/test_qt_machinery.py15
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",
[