mirror of
https://github.com/beetbox/beets.git
synced 2026-08-21 16:46:18 -04:00
Define a container for Likelies
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user