Skip to content

Releases: linuxserver/docker-beets

nightly-d741a464-ls286

16 May 11:04
05eacc4

Choose a tag to compare

Pre-release

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/nightly-d741a464-ls286/index.html

LinuxServer Changes:

Full Changelog: nightly-5df37abc-ls285...nightly-d741a464-ls286

Remote Changes:

core/structure: move UserError to beets.exceptions (#6643)

Update all references in core, plugins, and tests to import UserError
from the new location. This centralizes exception handling and improves
code organization.

nightly-44f7bf80-ls286

16 May 11:53
05eacc4

Choose a tag to compare

Pre-release

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/nightly-44f7bf80-ls286/index.html

LinuxServer Changes:

No changes

Remote Changes:

Fix path format queries for multi-valued fields (#6635)

Fixes #6598.

the issue was that path format queries are evaluated against an
in-memory Item using query.match(), where multi-valued fields such as
genres are represented as lists, e.g. ["Classical"]. Before this change,
string/exact matching treated that list as one whole value, so a path
rule like genres:=~Classical: _Classical/... failed to match and fell
back to the default path format, even though beet list
genres:=~Classical worked through the database query path. This change
updates in-memory matching so sequence-like field values are matched
element by element, while excluding strings and byte-like values from
sequence handling. I added regression tests for genres:=~Classical,
genres:=Classical, avoiding a false positive for Neoclassical, and
direct query.match() behavior on multi-valued fields. Manual
verification showed the original version returned match: False and
destination: ...\one\two, while the fixed version returns match: True
and destination: ...\one\three.

Summary

This fixes path format selection for multi-valued fields such as
genres.

Path format queries are evaluated against an in-memory Item via
query.match().
For multi-valued fields, the in-memory value is a list, for example:

genres = ["Classical"]

2.11.0-ls331

15 May 20:18
37817ab

Choose a tag to compare

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

15 May 20:17
4dc967e

Choose a tag to compare

Pre-release

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.

image

Fixes #6633

nightly-5df37abc-ls284

14 May 18:42
3c0a35c

Choose a tag to compare

Pre-release

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.

image

Fixes #6633

nightly-544d45a1-ls283

13 May 17:14
40ab779

Choose a tag to compare

Pre-release

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

13 May 14:21
40ab779

Choose a tag to compare

Pre-release

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 --count was provided,
    resulting in outputs like : 1. It now correctly displays duplicated
    items.
  • --count was ignored (aside from above bug), and item count was
    always appended to output.

Fixes: beetbox/beets#6476

nightly-7c50f94c-ls282

09 May 07:48
3b7ae61

Choose a tag to compare

Pre-release

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

08 May 20:12
f1365a5

Choose a tag to compare

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

08 May 14:46
0215cc8

Choose a tag to compare

Pre-release

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