Catch ValueError when setting gst required version

pytest.importskip is used to catch the case when beetsplug.bpd cannot be
imported. On macOS, the gi module was able to be imported, but when
trying to specify `gi.require_version`, a ValueError is raised about
Gst being unavailable. pytest does not catch this ValueError during
importskip as it is not an ImportError, and thus the test suite errors
during the test collection phase.

With this change, we catch the ValueError, and re-raise it as an
ImportError and pytest gracefully skips those tests.
This commit is contained in:
Ognyan Moore 2025-11-18 23:00:42 +03:00
parent 88ca0ce1fb
commit aa2dc9005f
No known key found for this signature in database
2 changed files with 12 additions and 1 deletions

View file

@ -27,7 +27,16 @@ import gi
from beets import ui from beets import ui
try:
gi.require_version("Gst", "1.0") gi.require_version("Gst", "1.0")
except ValueError as e:
# on some scenarios, gi may be importable, but we get a ValueError when
# trying to specify the required version. This is problematic in the test
# suite where test_bpd.py has a call to
# pytest.importorskip("beetsplug.bpd"). Re-raising as an ImportError
# makes it so the test collector functions as inteded.
raise ImportError from e
from gi.repository import GLib, Gst # noqa: E402 from gi.repository import GLib, Gst # noqa: E402
Gst.init(None) Gst.init(None)

View file

@ -66,6 +66,8 @@ Other changes:
- Refactored the ``beets/ui/commands.py`` monolithic file (2000+ lines) into - Refactored the ``beets/ui/commands.py`` monolithic file (2000+ lines) into
multiple modules within the ``beets/ui/commands`` directory for better multiple modules within the ``beets/ui/commands`` directory for better
maintainability. maintainability.
- :doc:`plugins/bpd`: Raise ImportError instead of ValueError when GStreamer is
unavailable, enabling ``importorskip`` usage in pytest setup.
2.5.1 (October 14, 2025) 2.5.1 (October 14, 2025)
------------------------ ------------------------