Releases: linuxserver/docker-beets
nightly-d179dbbc-ls294
CI Report:
https://ci-tests.linuxserver.io/linuxserver/beets/nightly-d179dbbc-ls294/index.html
LinuxServer Changes:
No changes
Remote Changes:
Fix codecov tests upload (#6713)
This PR fixes Codecov test result uploads failing because pytest
generated overly long parameterized test names.
When pytest.mark.parametrize cases do not define explicit IDs, pytest
builds test names from the full parameter values. A Discogs test with a
single large parameter set produced a test name long enough to break
Codecov upload processing.
What changed
- Removed single-case parametrization from the affected Discogs tests
and moved the constants into the test bodies. - Added explicit, concise
pytest.param(..., id=...)IDs for the
Lastgenretest_get_genreparameter cases. - Added the
_p = pytest.paramalias intest_lastgenre.pyto keep the
parametrized cases compact.
nightly-c4ed45a1-ls294
CI Report:
https://ci-tests.linuxserver.io/linuxserver/beets/nightly-c4ed45a1-ls294/index.html
LinuxServer Changes:
No changes
Remote Changes:
tests: use setup fixture in TestHelper (#6703)
- Move pytest setup/teardown into shared
TestHelpervia an autouse
setupfixture. - Collapse old pytest-specific helpers into the main helpers by using
TestHelperandPluginTestHelperas the standard test base classes. - Update plugin and library tests to use the new shared lifecycle
instead of custom fixtures or manualsetUp/tearDown. - Rewrite
test/plugins/test_ftintitle.pyto usePluginTestHelperand
configure_plugin, which removes manual environment wiring and makes
the test flow match other plugin tests. - Simplify
test/plugins/test_mbcollection.pyby dropping its local
helper fixture and relying on the shared test setup.
High-level impact
- Test architecture becomes more consistent: one shared pytest setup
path instead of many local patterns. - Boilerplate goes down across the test suite, so future tests should be
easier to write and maintain. - Deprecated helper split is reduced, which makes test utilities simpler
to understand. - Main behavior change is in test infrastructure, and it fixes the
failingftintitleandmbcollectiontests without changing production
plugin logic.
nightly-8152e434-ls294
CI Report:
https://ci-tests.linuxserver.io/linuxserver/beets/nightly-8152e434-ls294/index.html
LinuxServer Changes:
No changes
Remote Changes:
Fix KeyError when Spotify album response lacks 'label' field (#6708)
Fixes #6679
Changed the way label data is parsed from Spotify API in Spotify plugin.
Now if label data is absent from API response, plugin is still working
and can be used to match release.
nightly-3438b8b3-ls294
CI Report:
https://ci-tests.linuxserver.io/linuxserver/beets/nightly-3438b8b3-ls294/index.html
LinuxServer Changes:
No changes
Remote Changes:
convert: fix --playlist help formatting (#6706)
Before
After
nightly-1891d69b-ls294
CI Report:
https://ci-tests.linuxserver.io/linuxserver/beets/nightly-1891d69b-ls294/index.html
LinuxServer Changes:
No changes
Remote Changes:
refactor: Pytest based setup for plugins/test_convert (#6678)
Description
This PR is a refactor of test/plugins/test_convert.py and replaces the
unitest test cases with a pytest setup. Also replaced capture_log with
caplog fixture.
TODOs:
-
ChangelogNot needed as this is an internal refactor only
This is related to the multi-step efforts to improve logging in beets
beetbox/beets#6553
nightly-0786ea8e-ls294
CI Report:
https://ci-tests.linuxserver.io/linuxserver/beets/nightly-0786ea8e-ls294/index.html
LinuxServer Changes:
Full Changelog: nightly-52a7ba68-ls293...nightly-0786ea8e-ls294
Remote Changes:
autotagging: tidy up autotag module (#6687)
What changed
- Move
Match,AlbumMatch, andTrackMatchfrom
beets.autotag.hooksintobeets.autotag.match. - Expand
beets.autotag.__init__to re-export main autotag types and
functions likeDistance,Info,Match,assign_items,tag_album,
andtag_item. - Update internal code, plugins, tests, and docs to import from
beets.autotaginstead of reaching into deeper modules.
Architecture impact
beets.autotagnow acts as the main public API for autotagging.hooks.pystays focused on metadata/info structures.match.pynow owns match objects and matching behavior in one place.
High-level benefit
- Import paths become simpler and more consistent.
- Internal module boundaries are clearer.
- Future refactors inside autotag should be safer because callers depend
onbeets.autotag, not module internals.
nightly-8b3f1fb5-ls293
CI Report:
https://ci-tests.linuxserver.io/linuxserver/beets/nightly-8b3f1fb5-ls293/index.html
LinuxServer Changes:
No changes
Remote Changes:
refactor: Pytest based setup for test_library (#6677)
Description
This PR is a refactor of test/test_library.py and replaces the unitest
test cases with a pytest setup. Also replaced capture_log with caplog
fixture.
Needs rebasing after beetbox/beets#6659 is
merged.
TODOs:
-
ChangelogNot needed as this is an internal refactor only
This is related to the multi-step efforts to improve logging in beets
beetbox/beets#6553
nightly-52a7ba68-ls293
CI Report:
https://ci-tests.linuxserver.io/linuxserver/beets/nightly-52a7ba68-ls293/index.html
LinuxServer Changes:
Full Changelog: nightly-10e13c99-ls292...nightly-52a7ba68-ls293
Remote Changes:
spotify: batch spotifysync DB commit (#6673)
This is a follow-up to #6485. Currently spotifysync:
- batches Spotify HTTP requests, but still stores each item individually
- writes to the DB before writing tags
- logs Audio features API unavailable, skipping once per remaining item
after a 403
This makes logs noisy and causes unnecessary DB commit overhead.
This PR :
- keeps the existing batched Spotify API fetches
- batches
spotifysyncdatabase persistence into a single outer DB
transaction per run - aligns
spotifysyncwith the normal beets write-before-store pattern - suppresses repeated per-item audio-features unavailability log spam
Actual logs before fix (masked):
$ beet -v spotifysync -f album:"ALBUM"
...
spotify: Total 5 tracks
spotify: Processing 1/5 tracks - <Album A> - <Track 1>
spotify: Processing 2/5 tracks - <Album A> - <Track 2>
spotify: Processing 3/5 tracks - <Album A> - <Track 3>
spotify: Processing 4/5 tracks - <Album A> - <Track 4>
spotify: Processing 5/5 tracks - <Album A> - <Track 5>
spotify: Audio features API is unavailable (403 error). Skipping audio features for remaining tracks.
spotify: Audio features API unavailable, skipping
Sending event: database_change
Sending event: write
Sending event: after_write
spotify: Audio features API unavailable, skipping
Sending event: database_change
Sending event: write
Sending event: after_write
spotify: Audio features API unavailable, skipping
Sending event: database_change
Sending event: write
Sending event: after_write
spotify: Audio features API unavailable, skipping
Sending event: database_change
Sending event: write
Sending event: after_write
spotify: Audio features API unavailable, skipping
Sending event: database_change
Sending event: write
Sending event: after_writeLogs after fix (masked)):
$ beet -v spotifysync -f album:"ALBUM"
...
spotify: Total 5 tracks
spotify: Processing 1/5 tracks - <Album A> - <Track 1>
spotify: Processing 2/5 tracks - <Album A> - <Track 2>
spotify: Processing 3/5 tracks - <Album A> - <Track 3>
spotify: Processing 4/5 tracks - <Album A> - <Track 4>
spotify: Processing 5/5 tracks - <Album A> - <Track 5>
spotify: Audio features API is unavailable (403 error). Skipping audio features for remaining tracks.
Sending event: write
Sending event: after_write
Sending event: write
Sending event: after_write
Sending event: write
Sending event: after_write
Sending event: write
Sending event: after_write
Sending event: write
Sending event: after_write
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change- Changelog. (Add an entry to
docs/changelog.rstto the bottom of
one of the lists near the top of the document.) - Tests. (Very much encouraged but not strictly required.)
2.11.0-ls333
CI Report:
https://ci-tests.linuxserver.io/linuxserver/beets/2.11.0-ls333/index.html
LinuxServer Changes:
Full Changelog: 2.11.0-ls332...2.11.0-ls333
Remote Changes:
Updating PIP version of beets to 2.11.0
nightly-2efc80bc-ls292
CI Report:
https://ci-tests.linuxserver.io/linuxserver/beets/nightly-2efc80bc-ls292/index.html
LinuxServer Changes:
No changes
Remote Changes:
fetchart: catch OSError in _set_art for graceful permission error handling (#6662)
## Problem
When fetchart moves album art to the destination folder, a
PermissionError
(or other OSError) can crash beets with an unhandled traceback. This
happens
when a file is locked by another process, such as foobar2000 scanning
the folder
during import.
Example traceback from #6193:
PermissionError: [WinError 32] The process cannot access the file because it is being used by another process
Fix
Wrap album.set_art() in a try/except OSError block inside
_set_art.
On failure, log a warning and return False instead of crashing. The
batch_fetch_art CLI path now checks the return value and reports
"error writing album art" instead of a traceback.
Changes
beetsplug/fetchart.py:_set_artnow returnsbool; catches
OSErrorwith a warning logtest/plugins/test_fetchart.py: new test
test_set_art_oserror_is_handled_gracefullyverifies graceful handling
whenAlbum.set_artraisesPermissionErrordocs/changelog.rst: bug fix entry added
Fixes #6193

