Releases: linuxserver/docker-beets
2.11.0-ls331
CI Report:
https://ci-tests.linuxserver.io/linuxserver/beets/2.11.0-ls331/index.html
LinuxServer Changes:
Full Changelog: 2.11.0-ls330...2.11.0-ls331
Remote Changes:
Updating PIP version of beets to 2.11.0
nightly-5df37abc-ls285
CI Report:
https://ci-tests.linuxserver.io/linuxserver/beets/nightly-5df37abc-ls285/index.html
LinuxServer Changes:
Full Changelog: nightly-5df37abc-ls284...nightly-5df37abc-ls285
Remote Changes:
Update deps (#6632)
We have a vulnerability in urllib3 so here's an upgrade to all deps.
Fixes #6633
nightly-5df37abc-ls284
CI Report:
https://ci-tests.linuxserver.io/linuxserver/beets/nightly-5df37abc-ls284/index.html
LinuxServer Changes:
Full Changelog: nightly-03090964-ls283...nightly-5df37abc-ls284
Remote Changes:
Update deps (#6632)
We have a vulnerability in urllib3 so here's an upgrade to all deps.
Fixes #6633
nightly-544d45a1-ls283
CI Report:
https://ci-tests.linuxserver.io/linuxserver/beets/nightly-544d45a1-ls283/index.html
LinuxServer Changes:
No changes
Remote Changes:
fix(mbsync): do not clear metadata if import.from_scratch is set (#6625)
if import.from_scratch was set in the config, runnning mbsync would
clear any metadata not provided by MBz (replay gain, lyrics, genres...).
we now ignore this setting when running mbsync to preserve metadata.
Fixes: #6613
nightly-03090964-ls283
CI Report:
https://ci-tests.linuxserver.io/linuxserver/beets/nightly-03090964-ls283/index.html
LinuxServer Changes:
Full Changelog: nightly-7c50f94c-ls282...nightly-03090964-ls283
Remote Changes:
fix(duplicates): output format (#6622)
- The pugin used an empty format string unless
--countwas provided,
resulting in outputs like: 1. It now correctly displays duplicated
items. --countwas ignored (aside from above bug), and item count was
always appended to output.
Fixes: beetbox/beets#6476
nightly-7c50f94c-ls282
CI Report:
https://ci-tests.linuxserver.io/linuxserver/beets/nightly-7c50f94c-ls282/index.html
LinuxServer Changes:
Full Changelog: nightly-32487704-ls281...nightly-7c50f94c-ls282
Remote Changes:
lastgenre: Test empty last.fm result doesnt wipe (#6608)
Add a test case that proves that issue 5991 is fixed by now.
Closes #5991 .
2.11.0-ls330
CI Report:
https://ci-tests.linuxserver.io/linuxserver/beets/2.11.0-ls330/index.html
LinuxServer Changes:
Full Changelog: 2.11.0-ls329...2.11.0-ls330
Remote Changes:
Updating PIP version of beets to 2.11.0
nightly-32487704-ls281
CI Report:
https://ci-tests.linuxserver.io/linuxserver/beets/nightly-32487704-ls281/index.html
LinuxServer Changes:
Full Changelog: nightly-26ab6b26-ls280...nightly-32487704-ls281
Remote Changes:
fix: mbpseudo issues when applying pseudorelease (#6512)
I have not created an issue for this but I tried to use mbpseudo to
apply this pseudorelease:
https://musicbrainz.org/release/6c100fef-6abf-41c4-bd21-6f9becaaab6c
When doing that I encountered two errors as seen below, this PR should
fix those issues. The second issue was only apparent once the first
issue was fixed.
Sending event: import_task_choice
Traceback (most recent call last):
File "/lsiopy/bin/beet", line 6, in <module>
sys.exit(main())
^^^^^^
File "/lsiopy/lib/python3.12/site-packages/beets/ui/__init__.py", line 1013, in main
_raw_main(args)
File "/lsiopy/lib/python3.12/site-packages/beets/ui/__init__.py", line 992, in _raw_main
subcommand.func(lib, suboptions, subargs)
File "/lsiopy/lib/python3.12/site-packages/beets/ui/commands/import_/__init__.py", line 131, in import_func
import_files(lib, byte_paths, query)
File "/lsiopy/lib/python3.12/site-packages/beets/ui/commands/import_/__init__.py", line 75, in import_files
session.run()
File "/lsiopy/lib/python3.12/site-packages/beets/importer/session.py", line 237, in run
pl.run_parallel(QUEUE_SIZE)
File "/lsiopy/lib/python3.12/site-packages/beets/util/pipeline.py", line 471, in run_parallel
raise exc_info[1].with_traceback(exc_info[2])
File "/lsiopy/lib/python3.12/site-packages/beets/util/pipeline.py", line 336, in run
out = self.coro.send(msg)
^^^^^^^^^^^^^^^^^^^
File "/lsiopy/lib/python3.12/site-packages/beets/util/pipeline.py", line 195, in coro
task = func(*args, task)
^^^^^^^^^^^^^^^^^
File "/lsiopy/lib/python3.12/site-packages/beets/importer/stages.py", line 217, in user_query
_apply_choice(session, task)
File "/lsiopy/lib/python3.12/site-packages/beets/importer/stages.py", line 323, in _apply_choice
task.apply_metadata()
File "/lsiopy/lib/python3.12/site-packages/beets/importer/tasks.py", line 263, in apply_metadata
self.match.apply_metadata()
File "/lsiopy/lib/python3.12/site-packages/beets/autotag/hooks.py", line 609, in apply_metadata
for item, data in self.merged_pairs:
^^^^^^^^^^^^^^^^^
File "/lsiopy/lib/python3.12/site-packages/beets/autotag/hooks.py", line 603, in merged_pairs
(i, ti.merge_with_album(self.info))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/lsiopy/lib/python3.12/site-packages/beets/autotag/hooks.py", line 482, in merge_with_album
album = album_info.raw_data
^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/functools.py", line 998, in __get__
val = self.func(instance)
^^^^^^^^^^^^^^^^^^^
File "/lsiopy/lib/python3.12/site-packages/beets/autotag/hooks.py", line 301, in raw_data
data = {**super().raw_data}
^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/functools.py", line 998, in __get__
val = self.func(instance)
^^^^^^^^^^^^^^^^^^^
File "/lsiopy/lib/python3.12/site-packages/beets/autotag/hooks.py", line 176, in raw_data
data = self.__class__(**self.copy())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: PseudoAlbumInfo.__init__() missing 2 required positional arguments: 'pseudo_release' and 'official_release'
Traceback (most recent call last):
File "<frozen runpy>", line 198, in _run_module_as_main
File "<frozen runpy>", line 88, in _run_code
File "/home/martin/personal/src-ext/beets/beets/__main__.py", line 24, in <module>
main(sys.argv[1:])
~~~~^^^^^^^^^^^^^^
File "/home/martin/personal/src-ext/beets/beets/ui/__init__.py", line 1013, in main
_raw_main(args)
~~~~~~~~~^^^^^^
File "/home/martin/personal/src-ext/beets/beets/ui/__init__.py", line 992, in _raw_main
subcommand.func(lib, suboptions, subargs)
~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/martin/personal/src-ext/beets/beets/ui/commands/import_/__init__.py", line 131, in import_func
import_files(lib, byte_paths, query)
~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/martin/personal/src-ext/beets/beets/ui/commands/import_/__init__.py", line 75, in import_files
session.run()
~~~~~~~~~~~^^
File "/home/martin/personal/src-ext/beets/beets/importer/session.py", line 237, in run
pl.run_parallel(QUEUE_SIZE)
~~~~~~~~~~~~~~~^^^^^^^^^^^^
File "/home/martin/personal/src-ext/beets/beets/util/pipeline.py", line 471, in run_parallel
raise exc_info[1].with_traceback(exc_info[2])
File "/home/martin/personal/src-ext/beets/beets/util/pipeline.py", line 336, in run
out = self.coro.send(msg)
File "/home/martin/personal/src-ext/beets/beets/util/pipeline.py", line 195, in coro
task = func(*args, task)
File "/home/martin/personal/src-ext/beets/beets/importer/stages.py", line 217, in user_query
_apply_choice(session, task)
~~~~~~~~~~~~~^^^^^^^^^^^^^^^
File "/home/martin/personal/src-ext/beets/beets/importer/stages.py", line 326, in _apply_choice
task.add(session.lib)
~~~~~~~~^^^^^^^^^^^^^
File "/home/martin/personal/src-ext/beets/beets/importer/tasks.py", line 503, in add
self.album = lib.add_album(self.imported_items())
~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/martin/personal/src-ext/beets/beets/library/library.py", line 83, in add_album
item.add(self)
~~~~~~~~^^^^^^
File "/home/martin/personal/src-ext/beets/beets/library/models.py", line 84, in add
super().add(lib)
~~~~~~~~~~~^^^^^
File "/home/martin/personal/src-ext/beets/beets/dbcore/db.py", line 717, in add
self.store()
~~~~~~~~~~^^
File "/home/martin/personal/src-ext/beets/beets/library/models.py", line 74, in store
super().store(fields)
~~~~~~~~~~~~~^^^^^^^^
File "/home/martin/personal/src-ext/beets/beets/dbcore/db.py", line 659, in store
tx.mutate(
~~~~~~~~~^
f"INSERT INTO {self._flex_table} "
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...<2 lines>...
(self.id, key, value),
^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/martin/personal/src-ext/beets/beets/dbcore/db.py", line 1039, in mutate
return self.db._connection().execute(statement, subvals).lastrowid
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^
sqlite3.ProgrammingError: Error binding parameter 3: type 'dict' is not supported
2.11.0-ls329
CI Report:
https://ci-tests.linuxserver.io/linuxserver/beets/2.11.0-ls329/index.html
LinuxServer Changes:
Full Changelog: 2.10.0-ls328...2.11.0-ls329
Remote Changes:
Updating PIP version of beets to 2.11.0
nightly-7dde183d-ls280
CI Report:
https://ci-tests.linuxserver.io/linuxserver/beets/nightly-7dde183d-ls280/index.html
LinuxServer Changes:
No changes
Remote Changes:
convert: Add types and simplify args parsing (#6573)
Refactor ConvertPlugin to use instance attributes instead of
parameter threading
This PR cleans up the ConvertPlugin class by eliminating the pattern
of passing config values as explicit parameters through the call chain.
What changed
- Removed
_get_opts_and_config— a method that returned a 9-tuple
of config values. All callers unpacked and re-passed these values
explicitly. - Config values are now
@cached_propertyattributes on
ConvertPlugin:dest,fmt,force,pretend,link,hardlink,
threads,playlist,path_formats. - CLI option defaults now set from config, so
self.config.set(vars(opts))inconvert_funcis sufficient to merge
CLI overrides — no moreopts.x or config["x"]branching in
_get_opts_and_config. get_format→commandcached property returning a typed
FormatCommandNamedTuple, replacing a free function that accessed
the globalconfig.should_transcodeandencodesignatures simplified —fmt,
force, andpretendno longer passed as arguments; methods read from
self._parallel_convertandconvert_itemreduced to(items, keep_new)signatures.- Free module-level functions (
get_format,in_no_convert,
should_transcode) removed; equivalent logic now lives as methods,
removing the dependency on the globalconfigobject. - Types and
TYPE_CHECKINGimports added throughout;after_convert
event registered inplugins.py.
Impact
No behaviour change. The refactor reduces argument surface area
significantly, makes the config read path explicit and testable
per-instance, and eliminates a source of subtle bugs where CLI flags
could silently fall back to wrong defaults.
