Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
480 changes: 448 additions & 32 deletions beetsplug/_utils/musicbrainz.py

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion beetsplug/listenbrainz.py
Original file line number Diff line number Diff line change
Expand Up @@ -299,7 +299,7 @@ def get_track_info(self, tracks):
identifier, includes=["releases", "artist-credits"]
)
title = recording.get("title")
artist_credit = recording.get("artist-credit", [])
artist_credit = recording.get("artist_credit", [])
if artist_credit:
artist = artist_credit[0].get("artist", {}).get("name")
else:
Expand Down
4 changes: 2 additions & 2 deletions beetsplug/mbcollection.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ def id(self) -> str:
@property
def release_count(self) -> int:
"""Total number of releases recorded in the collection."""
return self.data["release-count"]
return self.data["release_count"]

@property
def releases_url(self) -> str:
Expand Down Expand Up @@ -173,7 +173,7 @@ def collection(self) -> MBCollection:
# Get all release collection IDs, avoiding event collections
if not (
collection_by_id := {
c["id"]: c for c in collections if c["entity-type"] == "release"
c["id"]: c for c in collections if c["entity_type"] == "release"
}
):
raise ui.UserError("No release collection found.")
Expand Down
31 changes: 18 additions & 13 deletions beetsplug/mbpseudo.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,12 @@
from beets.autotag.distance import Distance
from beets.autotag.hooks import AlbumMatch
from beets.library import Item
from beetsplug._typing import JSONDict

from ._utils.musicbrainz import (
Release,
ReleaseRelation,
ReleaseRelationRelease,
)

_STATUS_PSEUDO = "Pseudo-Release"

Expand Down Expand Up @@ -133,7 +138,7 @@ def candidates(
yield album_info

@override
def album_info(self, release: JSONDict) -> AlbumInfo:
def album_info(self, release: Release) -> AlbumInfo:
official_release = super().album_info(release)

if release.get("status") == _STATUS_PSEUDO:
Expand Down Expand Up @@ -161,30 +166,32 @@ def album_info(self, release: JSONDict) -> AlbumInfo:
else:
return official_release

def _intercept_mb_release(self, data: JSONDict) -> list[str]:
def _intercept_mb_release(self, data: Release) -> list[str]:
album_id = data["id"] if "id" in data else None
if self._has_desired_script(data) or not isinstance(album_id, str):
return []

return [
pr_id
for rel in data.get("release-relations", [])
for rel in data.get("release_relations", [])
if (pr_id := self._wanted_pseudo_release_id(album_id, rel))
is not None
]

def _has_desired_script(self, release: JSONDict) -> bool:
def _has_desired_script(
self, release: Release | ReleaseRelationRelease
) -> bool:
if len(self._scripts) == 0:
return False
elif script := release.get("text-representation", {}).get("script"):
elif script := release.get("text_representation", {}).get("script"):
return script in self._scripts
else:
return False

def _wanted_pseudo_release_id(
self,
album_id: str,
relation: JSONDict,
relation: ReleaseRelation,
) -> str | None:
if (
len(self._scripts) == 0
Expand All @@ -206,19 +213,17 @@ def _wanted_pseudo_release_id(
return None

def _replace_artist_with_alias(
self,
raw_pseudo_release: JSONDict,
pseudo_release: AlbumInfo,
self, raw_pseudo_release: Release, pseudo_release: AlbumInfo
):
"""Use the pseudo-release's language to search for artist
alias if the user hasn't configured import languages."""

if len(config["import"]["languages"].as_str_seq()) > 0:
return

lang = raw_pseudo_release.get("text-representation", {}).get("language")
artist_credits = raw_pseudo_release.get("release-group", {}).get(
"artist-credit", []
lang = raw_pseudo_release.get("text_representation", {}).get("language")
artist_credits = raw_pseudo_release.get("release_group", {}).get(
"artist_credit", []
)
aliases = [
artist_credit.get("artist", {}).get("aliases", [])
Expand Down
Loading
Loading