Skip to content

Releases: linuxserver/docker-beets

nightly-a02a896d-ls301

17 Jun 20:02
0e076cd

Choose a tag to compare

Pre-release

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/nightly-a02a896d-ls301/index.html

LinuxServer Changes:

No changes

Remote Changes:

tests: replace function-scoped helper fixtures with TestHelper (#6709)

  • Test setup was consolidated into shared helper classes instead of
    using local helper fixtures.
  • test/library/test_migrations.py now uses MigrationTestHelper to
    provide one common migration harness, with each test class defining only
    the legacy state and migration it needs.
  • Plugin tests in test/plugins/test_fuzzy.py,
    test/plugins/test_missing.py, and
    test/plugins/utils/test_playcount.py now rely on shared helpers like
    PluginTestHelper and TestHelper for common setup.

Note: I kept these fixtures in these files

  • test_query.py
  • plugins/test_random.py
  • plugins/test_aura.py
  • plugins/test_lyrics.py

because they intentionally use a higher scope, for example in
test_query.py:

@pytest.fixture(scope="class")
def helper():
    helper = TestHelper()
    helper.setup_beets()

    yield helper

    helper.teardown_beets()

Using this setup pattern in test_query.py significantly improved
testing durations.

Architecture impact

  • Test infrastructure now follows a clearer base-class pattern for
    shared setup.
  • Migration tests cleanly separate 'prepare old state' from 'run
    migration and verify result'.
  • Plugin tests now use the same setup path, which makes new tests easier
    to add and keeps test structure more consistent across files.

High-level outcome

  • Less duplicated fixture boilerplate.
  • More consistent and easier-to-read test architecture.
  • Tests stay focused on behavior being verified, which should make
    maintenance and future extension simpler.

nightly-7e71c668-ls301

17 Jun 18:02
0e076cd

Choose a tag to compare

Pre-release

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/nightly-7e71c668-ls301/index.html

LinuxServer Changes:

Full Changelog: nightly-cb564a6e-ls300...nightly-7e71c668-ls301

Remote Changes:

importer: improve handling of duplicates (#6702)

This change centralizes duplicate handling in the import pipeline.

  • ImportTask now carries a single duplicate_action state instead of
    separate duplicate flags, so duplicate decisions are represented in one
    place.
  • ImportSession.get_duplicate_action() becomes the shared entry point
    for resolving the configured duplicate policy.
  • TerminalImportSession now only prompts the user when the configured
    action is ASK; otherwise it reuses the shared session logic.
  • Duplicate resolution in beets/importer/stages.py is simplified to
    call the session API instead of re-implementing config lookup and
    branching.

High-level impact

  • Makes duplicate behavior more consistent across importer stages and UI
    sessions.
  • Reduces duplicated logic between core importer flow, terminal
    prompting, and test fixtures.
  • Simplifies future changes to duplicate handling because policy
    resolution now lives behind one session-level interface.
  • Cleans up tests to use real config-driven duplicate behavior instead
    of custom fixture-only overrides.

nightly-73605d54-ls301

17 Jun 22:10
0e076cd

Choose a tag to compare

Pre-release

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/nightly-73605d54-ls301/index.html

LinuxServer Changes:

No changes

Remote Changes:

typing: add missing types to beets.importer (#6711)

  • This change tightens typing across the importer pipeline, mainly in
    beets.importer.session, beets.importer.stages,
    beets.importer.tasks, beets.importer.state, and
    beets.util.pipeline.

  • Architecturally, it makes the importer's core flow more explicit:

    • session methods now declare clear input/output types
  • pipeline stage message types are named and propagated through
    Pipeline

    • task classes expose more precise return values and argument types
  • plugin event dispatch for import_task_created now has a typed
    contract

  • A small but important part of the change is switching importer config
    handling to work with confuse views more safely, using .set(...) and
    .get(...) instead of replacing values directly. This keeps config
    mutation aligned with the config system instead of treating it like a
    plain dict.

  • There are also a few correctness-oriented fixes uncovered while adding
    types, such as:

  • keeping byte/string path handling consistent in importer task cleanup
    and archive extraction

    • making nullable values explicit before use
    • returning None in places that already behaved that way implicitly
  • High-level impact: no feature change to importer behavior is intended.
    The main benefit is a clearer, more strongly typed importer architecture
    that is easier to reason about, safer to refactor, and better at
    catching edge cases during development.

nightly-cb564a6e-ls300

16 Jun 18:13
6dc54b3

Choose a tag to compare

Pre-release

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/nightly-cb564a6e-ls300/index.html

LinuxServer Changes:

Full Changelog: nightly-2337cfb6-ls299...nightly-cb564a6e-ls300

Remote Changes:

refactor: removed capture_log (#6739)

This pull request remove the last remnants of the capture_log
context-manager used previously in the testing module.

This touches:

  • test_logging
  • test_importer

TODOs:

  • Changelog Not needed as this is an internal refactor only,
    will add an entry once all logging related changes are done.

This is related to the multi-step efforts to improve logging in beets
beetbox/beets#6553

nightly-60047dfa-ls299

14 Jun 15:42
c69c4fc

Choose a tag to compare

Pre-release

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/nightly-60047dfa-ls299/index.html

LinuxServer Changes:

No changes

Remote Changes:

convert: fix beets.util.pipeline import regression (#6740)

  • Use an explicit pipeline import for convert pipeline setup and
    decorators.
  • This fixes AttributeError when beets.util does not automatically
    expose pipeline.

See:

$ python -c 'import beetsplug.convert'

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/home/sarunas/repo/beets/beetsplug/convert.py", line 73, in <module>
    class ConvertPlugin(BeetsPlugin):
  File "/home/sarunas/repo/beets/beetsplug/convert.py", line 402, in ConvertPlugin
    @util.pipeline.mutator_stage
AttributeError: module 'beets.util' has no attribute 'pipeline'
$ python -c 'from beets import util; print(util.pipeline)'

Traceback (most recent call last):
  File "<string>", line 1, in <module>
AttributeError: module 'beets.util' has no attribute 'pipeline'

nightly-2337cfb6-ls299

14 Jun 12:04
c69c4fc

Choose a tag to compare

Pre-release

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/nightly-2337cfb6-ls299/index.html

LinuxServer Changes:

Full Changelog: nightly-01808922-ls298...nightly-2337cfb6-ls299

Remote Changes:

db: simplify LazyConvertDict (#6734)

  • Replaces LazyConvertDict with LazyDict, a simpler UserDict-based
    container for lazily converted model values.
  • Removes the separate _awaken construction path and routes
    database-loaded values through Model.__init__, so both normal and
    database-backed objects follow the same creation flow.
  • Centralizes SQL-to-Python conversion in Model._convert, which makes
    value handling easier to reason about and reduces special-case model
    initialization logic.

High-level impact

  • Simplifies the model storage architecture by reducing custom dict
    behavior.
  • Makes object construction more consistent across the codebase.
  • Lowers maintenance risk by keeping lazy conversion in one place while
    preserving the existing lazy-loading behavior.

2.11.0-ls335

12 Jun 20:47
4c6b111

Choose a tag to compare

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/2.11.0-ls335/index.html

LinuxServer Changes:

Full Changelog: 2.11.0-ls334...2.11.0-ls335

Remote Changes:

Updating PIP version of beets to 2.11.0

nightly-ec729d31-ls298

12 Jun 02:10
7cf1da8

Choose a tag to compare

Pre-release

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/nightly-ec729d31-ls298/index.html

LinuxServer Changes:

No changes

Remote Changes:

lyrics: add rate limiting and exponential backoff to prevent 429 errors (#6729)

Add a LyricsSession class that mounts RateLimitAdapter (4 req/sec) and
configures urllib3 Retry with exponential backoff on 429 responses. Each
backend instance gets its own session so rate limits apply independently
per API source.

Fixes #6728

nightly-beff630d-ls298

13 Jun 11:52
7cf1da8

Choose a tag to compare

Pre-release

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/nightly-beff630d-ls298/index.html

LinuxServer Changes:

No changes

Remote Changes:

refactor(ftintitle): cache config options (#6732)

Pre-factor for beetbox/beets#6726.

Make ftintitle's config @cached_property attributes instead of
passing them through the call stack. Modeled after similar recent
changes in convert.

Changes

  • Add cached plugin properties for auto, drop, format,
    keep_in_artist, preserve_album_artist, and custom_words, keeping
    the existing cached bracket_keywords property I forgot I added a while
    back.
  • commands(), imported(), ft_in_title(), and update_metadata()
    are cleaned up to read these directly.
  • Don't read auto during plugin init; the import stage remains
    registered and imported() checks auto when invoked.

nightly-ad03b35f-ls298

13 Jun 02:07
7cf1da8

Choose a tag to compare

Pre-release

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/nightly-ad03b35f-ls298/index.html

LinuxServer Changes:

No changes

Remote Changes:

Fix integration tests (#6724)

This PR tightens the integration test workflow so CI runs the
dependency-heavy checks that are usually skipped in local environments.

What changed

  • Install the system packages and Poetry extras needed by
    integration-only coverage, including ffmpeg/ffprobe,
    ImageMagick/Pillow-backed art resizing, chroma, docs, replaygain,
    reflink, lyrics, and related plugin dependencies.
  • Run poe docs before poe test in the integration workflow and set
    LYRICS_UPDATED=1 so lyrics tests are included in CI.
  • Centralize CI detection in beets.test.helper.RUNNING_IN_CI and reuse
    shared import/program checks across test collection and helpers.
  • Keep dependency-heavy tests strict in the beetbox GitHub Actions
    environment, while skipping them locally when optional tools/modules are
    unavailable.
  • Mark ffprobe-, artresizer-, chroma-, pandoc-, and completion-related
    cases with focused availability gates so local test runs fail less often
    for missing optional dependencies.
  • Update docs link-check ignores and stale documentation URLs so poe check-docs-links is less noisy in CI.