Catch ValueError when beetsplug.bpd cannot be imported (#6170)

Catch ValueError when setting gst required version

`pytest.importorskip` 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.

Fixes #3324
This commit is contained in:
Sebastian Mohr 2025-11-19 12:49:07 +01:00 committed by GitHub
commit f79c125d15
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
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
gi.require_version("Gst", "1.0") try:
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)
------------------------ ------------------------