Releases: linuxserver/docker-beets
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
nightly-10e13c99-ls292
CI Report:
https://ci-tests.linuxserver.io/linuxserver/beets/nightly-10e13c99-ls292/index.html
LinuxServer Changes:
Full Changelog: nightly-05011323-ls291...nightly-10e13c99-ls292
Remote Changes:
Moved PytestPluginTestHelper class into test_helper. (#6658)
This PR moved the PytestPluginTestHelper which was duplicated in quite
a few test files into the beets/test/helper.py file.
nightly-0600d4ea-ls291
CI Report:
https://ci-tests.linuxserver.io/linuxserver/beets/nightly-0600d4ea-ls291/index.html
LinuxServer Changes:
Full Changelog: nightly-26ab08bf-ls290...nightly-0600d4ea-ls291
Remote Changes:
Move path formats and replacements logic into Library and shared util (#6647)
This PR moves path format and replacement retrieval out of beets.ui
into library/shared utilities.
Changes
- Added
beets/util/pathformats.pywithPF_KEY_DEFAULT,
PF_KEY_QUERIES, andget_path_formats(subview). - Added
Library.path_formatsandLibrary.replacementsas
cached_propertyvalues derived from config. - Removed UI-owned
get_path_formats/get_replacementsand simplified
_open_library()to constructLibrarywithout passing those values. - Updated consumers (
beets/library/models.py,beetsplug/bench.py,
beetsplug/convert.py) to use the shared path-format utility. - Refactored convert destination path calls through
ConvertPlugin.get_item_destination. - Replaced redundant UI tests with focused coverage in
test/util/test_pathformats.py. - Updated
.git-blame-ignore-revs.
Why
- Keeps path/replacement behavior close to library internals instead of
CLI orchestration. - Preserves layered
pathsdefaults by iterating config via Confuse
items(). - Reduces duplication in convert destination handling.
nightly-05011323-ls291
CI Report:
https://ci-tests.linuxserver.io/linuxserver/beets/nightly-05011323-ls291/index.html
LinuxServer Changes:
No changes
Remote Changes:
Add py typed to beetsplug (#6670)
PR Summary
This change adds beetsplug/py.typed to mark beetsplug as a typed
Python package under PEP 561.
High-level impact
- Tells type checkers that
beetsplugships type information. - Improves typing support for code that imports
beetsplug(for
example,beetcamp). - Has no runtime or architecture changes beyond package metadata.
2.11.0-ls332
CI Report:
https://ci-tests.linuxserver.io/linuxserver/beets/2.11.0-ls332/index.html
LinuxServer Changes:
Full Changelog: 2.11.0-ls331...2.11.0-ls332
Remote Changes:
Updating PIP version of beets to 2.11.0
nightly-da16db11-ls290
CI Report:
https://ci-tests.linuxserver.io/linuxserver/beets/nightly-da16db11-ls290/index.html
LinuxServer Changes:
Full Changelog: nightly-6dd62516-ls289...nightly-da16db11-ls290
Remote Changes:
docs: adding beets-getlrc to the 'other plugins' list (#6664)
Description
I added a plugin i made to the docs (index.rst). I made sure to add a
link to my github repo for the project. Nothing else was changed.
nightly-96575856-ls290
CI Report:
https://ci-tests.linuxserver.io/linuxserver/beets/nightly-96575856-ls290/index.html
LinuxServer Changes:
No changes
Remote Changes:
library: include path and reason in ReadError/WriteError messages (#6645)
ReadError.__str__ and WriteError.__str__ put super() straight into
an f-string, so a failed read or write printed error reading <super: <class 'ReadError'>, <ReadError object>> and the actual path and reason
were lost. Calling super().__str__() returns the FileOperationError
message with the path and underlying reason. The reported beet import
case now logs the file path and the failure reason.
Fixes #6560.
nightly-26ab08bf-ls290
CI Report:
https://ci-tests.linuxserver.io/linuxserver/beets/nightly-26ab08bf-ls290/index.html
LinuxServer Changes:
No changes
Remote Changes:
listenbrainz: add option to import listens from ListenBrainz data export zip (#6606)
Since importing listens from the API is rather slow and puts unnecessary
load on the servers, importing a dump exported from
https://listenbrainz.org/settings/export/ should also be possible. This
change introduces the export-file parameter to the lbimport command,
which takes all listens from the zipfile to update the play counts.
I also fixed an issue where mbid_mapping could be None if explicitly
set to null in the JSON (which happens for these exports sometimes),
and changed the recording mbid logic to prefer one explicitly supplied
by the player in the additional_data, instead of relying on the
(sometimes inaccurate) mapper.
Since the --max parameter isn't documented either, I'm unsure whether
I should add the parameter to the plugin docs. In theory, the --help
parameter already tells you enough.
I'm also not sure if the --max parameter should apply to exported
files, especially since the order of zip file entries isn't
deterministic.
nightly-6dd62516-ls289
CI Report:
https://ci-tests.linuxserver.io/linuxserver/beets/nightly-6dd62516-ls289/index.html
LinuxServer Changes:
Full Changelog: nightly-4746d852-ls288...nightly-6dd62516-ls289
Remote Changes:
Fix album modify splitting multi-value field strings into individual characters (#6653)
Fixes #5690
Problem
When running beet mod -a artists=Charli XCX in album mode, the
artists tag value gets split into individual characters on disk. Item
mode (beet mod without -a) works correctly.
Root Cause
Album._type(artists)returnsDEFAULT(artists is not an Album
fixed field), soAlbum._parsereturns a plain string.- When
Album.store()propagates to items,
MULTI_VALUE_DSV.normalize(value)falls through tomodel_type(value)
=list(value), splitting the string into characters.
Fix
DelimitedString.normalize(types.py): Handle string input by
parsing it (splitting by delimiter if present) instead oflist(). This
prevents character-level splitting.Model._type(db.py): Fall back to the related models field
definitions so multi-value types (e.g.MULTI_VALUE_DSVforartists)
are recognized on both Album and Item models.