Skip to content

musicbrainz: crash when releases lack the "track" key. #6302

@henry-oberholtzer

Description

@henry-oberholtzer

In rare instances, a musicbrainz release can be both in the database and delivered without tracks - this release was found in an import attempt and causes a crash in the plugin, as the "track" key is assumed to always be present.

I think this can be handled by rejecting a release candidate if it has no track key, since there wouldn't be anything to match.

Problem

Running this command in verbose (-vv) mode:

musicbrainz: Requesting MusicBrainz release 3ed3affe-9664-40a8-a9cb-6a4a25b638e1
Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "C:\Python312\Scripts\beet.exe\__main__.py", line 7, in <module>
  File "C:\Python312\Lib\site-packages\beets\ui\__init__.py", line 1629, in main
    _raw_main(args)
  File "C:\Python312\Lib\site-packages\beets\ui\__init__.py", line 1608, in _raw_main
    subcommand.func(lib, suboptions, subargs)
  File "C:\Python312\Lib\site-packages\beets\ui\commands\import_\__init__.py", line 131, in import_func
    import_files(lib, byte_paths, query)
  File "C:\Python312\Lib\site-packages\beets\ui\commands\import_\__init__.py", line 75, in import_files
    session.run()
  File "C:\Python312\Lib\site-packages\beets\importer\session.py", line 236, in run
    pl.run_parallel(QUEUE_SIZE)
  File "C:\Python312\Lib\site-packages\beets\util\pipeline.py", line 471, in run_parallel
    raise exc_info[1].with_traceback(exc_info[2])
  File "C:\Python312\Lib\site-packages\beets\util\pipeline.py", line 336, in run
    out = self.coro.send(msg)
          ^^^^^^^^^^^^^^^^^^^
  File "C:\Python312\Lib\site-packages\beets\util\pipeline.py", line 219, in coro
    func(*(args + (task,)))
  File "C:\Python312\Lib\site-packages\beets\importer\stages.py", line 146, in lookup_candidates
    task.lookup_candidates(session.config["search_ids"].as_str_seq())
  File "C:\Python312\Lib\site-packages\beets\importer\tasks.py", line 367, in lookup_candidates
    autotag.tag_album(self.items, search_ids=search_ids)
  File "C:\Python312\Lib\site-packages\beets\autotag\match.py", line 319, in tag_album
    for matched_candidate in metadata_plugins.candidates(
  File "C:\Python312\Lib\site-packages\beets\plugins.py", line 559, in wrapper
    for v in func(*args, **kwargs):
  File "C:\Python312\Lib\site-packages\beets\metadata_plugins.py", line 41, in candidates
    yield from plugin.candidates(*args, **kwargs)
  File "C:\Python312\Lib\site-packages\beetsplug\musicbrainz.py", line 770, in candidates
    if album_info := self.album_for_id(id_):
                     ^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python312\Lib\site-packages\beetsplug\musicbrainz.py", line 812, in album_for_id
    release = self.album_info(res)
              ^^^^^^^^^^^^^^^^^^^^
  File "C:\Python312\Lib\site-packages\beetsplug\musicbrainz.py", line 477, in album_info
    ntracks = sum(len(m["tracks"]) for m in release["media"])
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python312\Lib\site-packages\beetsplug\musicbrainz.py", line 477, in <genexpr>
    ntracks = sum(len(m["tracks"]) for m in release["media"])
                      ~^^^^^^^^^^
KeyError: 'tracks'

Metadata

Metadata

Assignees

No one assigned

    Labels

    metadata_pluginsAn issue that is generally related to metadata plugin logic.musicbrainz

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions