Skip to content

Releases: linuxserver/docker-beets

nightly-d179dbbc-ls294

06 Jun 09:58
c7c4a8d

Choose a tag to compare

Pre-release

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
    Lastgenre test_get_genre parameter cases.
  • Added the _p = pytest.param alias in test_lastgenre.py to keep the
    parametrized cases compact.

nightly-c4ed45a1-ls294

03 Jun 19:49
c7c4a8d

Choose a tag to compare

Pre-release

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 TestHelper via an autouse
    setup fixture.
  • Collapse old pytest-specific helpers into the main helpers by using
    TestHelper and PluginTestHelper as the standard test base classes.
  • Update plugin and library tests to use the new shared lifecycle
    instead of custom fixtures or manual setUp/tearDown.
  • Rewrite test/plugins/test_ftintitle.py to use PluginTestHelper and
    configure_plugin, which removes manual environment wiring and makes
    the test flow match other plugin tests.
  • Simplify test/plugins/test_mbcollection.py by 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
    failing ftintitle and mbcollection tests without changing production
    plugin logic.

nightly-8152e434-ls294

06 Jun 05:14
c7c4a8d

Choose a tag to compare

Pre-release

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

04 Jun 12:46
c7c4a8d

Choose a tag to compare

Pre-release

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

image

After

image

nightly-1891d69b-ls294

04 Jun 09:48
c7c4a8d

Choose a tag to compare

Pre-release

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:

  • Changelog Not 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

03 Jun 15:49
c7c4a8d

Choose a tag to compare

Pre-release

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, and TrackMatch from
    beets.autotag.hooks into beets.autotag.match.
  • Expand beets.autotag.__init__ to re-export main autotag types and
    functions like Distance, Info, Match, assign_items, tag_album,
    and tag_item.
  • Update internal code, plugins, tests, and docs to import from
    beets.autotag instead of reaching into deeper modules.

Architecture impact

  • beets.autotag now acts as the main public API for autotagging.
  • hooks.py stays focused on metadata/info structures.
  • match.py now 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
    on beets.autotag, not module internals.

nightly-8b3f1fb5-ls293

01 Jun 20:18
2c490a9

Choose a tag to compare

Pre-release

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:

  • Changelog Not 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

01 Jun 09:25
2c490a9

Choose a tag to compare

Pre-release

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 spotifysync database persistence into a single outer DB
    transaction per run
  • aligns spotifysync with 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_write

Logs 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.rst to 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

29 May 20:56
1d72ee1

Choose a tag to compare

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

29 May 17:38
40d9ec9

Choose a tag to compare

Pre-release

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_art now returns bool; catches
    OSError with a warning log
  • test/plugins/test_fetchart.py: new test
    test_set_art_oserror_is_handled_gracefully verifies graceful handling
    when Album.set_art raises PermissionError
  • docs/changelog.rst: bug fix entry added

Fixes #6193