Define a container for Likelies

This commit is contained in:
Šarūnas Nejus
2026-07-17 09:55:47 +01:00
parent 649135c0f5
commit 4e2e70f2fb
3 changed files with 31 additions and 13 deletions

View File

@@ -16,7 +16,7 @@ if TYPE_CHECKING:
from collections.abc import Iterator, KeysView, Sequence
from beets.library import Item
from beets.util import AttrDict
from beets.util import Likelies
from beets.util.color import ColorName
from .hooks import AlbumInfo, TrackInfo
@@ -428,7 +428,7 @@ def track_distance(
def distance(
original: AttrDict[Any],
original: Likelies,
album_info: AlbumInfo,
item_info_pairs: list[tuple[Item, TrackInfo]],
unmatched_count: int,
@@ -436,7 +436,7 @@ def distance(
"""Determine how "significant" an album metadata change would be.
Returns a Distance object.
`original` is an AttrDict with the original album metadata.
`original` contains original album metadata.
`album_info` is an AlbumInfo object reflecting the album to be compared.
`item_info_pairs` is a list with matched (Item, TrackInfo) pairs.
`unmatched_count` is the number of unmatched tracks on the release.

View File

@@ -1,8 +1,8 @@
from __future__ import annotations
from typing import TYPE_CHECKING, Any, Literal, NamedTuple
from typing import TYPE_CHECKING, Literal, NamedTuple
from beets.util import AttrDict, get_most_common_tags
from beets.util import Likelies, get_most_common_tags
if TYPE_CHECKING:
from collections.abc import Sequence
@@ -14,7 +14,7 @@ class Source(NamedTuple):
type: Literal["album", "track"]
artist: str
name: str
data: AttrDict[Any]
data: Likelies
items: Sequence[Item]
id: str
id_consensus: bool
@@ -35,11 +35,11 @@ class Source(NamedTuple):
likelies = get_most_common_tags(items)
return cls(
type="album",
artist=likelies["artist"],
name=likelies["album"],
data=AttrDict(likelies),
artist=likelies.artist,
name=likelies.album,
data=likelies,
items=items,
id=likelies["mb_albumid"],
id=likelies.mb_albumid,
id_consensus=len({i.mb_albumid for i in items}) == 1,
)
@@ -50,7 +50,7 @@ class Source(NamedTuple):
type="track",
artist=item.artist,
name=item.title,
data=AttrDict(item),
data=Likelies(item),
items=[item],
id=item.mb_trackid,
id_consensus=True,

View File

@@ -811,7 +811,7 @@ def plurality(objs: Iterable[T]) -> tuple[T, int]:
return c.most_common(1)[0]
def get_most_common_tags(items: Sequence[Item]) -> dict[str, Any]:
def get_most_common_tags(items: Sequence[Item]) -> Likelies:
"""Extract the most common value for each field given a list of items."""
assert items # Must be nonempty.
@@ -839,7 +839,7 @@ def get_most_common_tags(items: Sequence[Item]) -> dict[str, Any]:
if len({i.albumartist for i in items}) == 1 and likelies["albumartist"]:
likelies["artist"] = likelies["albumartist"]
return likelies
return Likelies(likelies)
# stdout and stderr as bytes
@@ -1245,3 +1245,21 @@ class AttrDict(dict[str, T]):
def __hash__(self) -> int: # type: ignore[override]
return id(self)
class Likelies(AttrDict[Any]):
"""A dictionary of the most common tags in a list of items."""
artist: str
album: str
albumartist: str
year: int
disctotal: int
mb_albumid: str
label: str
barcode: str
catalognum: str
country: str
media: str
albumdisambig: str
data_source: str