Skip to content

Commit c252adc

Browse files
committed
Moved everything that is needed for autotagging into metadata_plugins
file.
1 parent 5537643 commit c252adc

File tree

3 files changed

+37
-94
lines changed

3 files changed

+37
-94
lines changed

beets/autotag/match.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
import lap
2828
import numpy as np
2929

30-
from beets import config, logging, plugins
30+
from beets import config, logging, metadata_plugins
3131
from beets.autotag import (
3232
AlbumInfo,
3333
AlbumMatch,
@@ -213,7 +213,7 @@ def track_distance(
213213
dist.add_expr("medium", item.disc != track_info.medium)
214214

215215
# Plugins.
216-
dist.update(plugins.track_distance(item, track_info))
216+
dist.update(metadata_plugins.track_distance(item, track_info))
217217

218218
return dist
219219

@@ -330,7 +330,7 @@ def distance(
330330
dist.add("unmatched_tracks", 1.0)
331331

332332
# Plugins.
333-
dist.update(plugins.album_distance(items, album_info, mapping))
333+
dist.update(metadata_plugins.album_distance(items, album_info, mapping))
334334

335335
return dist
336336

@@ -356,7 +356,7 @@ def match_by_id(items: Iterable[Item]) -> AlbumInfo | None:
356356
return None
357357
# If all album IDs are equal, look up the album.
358358
log.debug("Searching for discovered album ID: {0}", first)
359-
return plugins.album_for_id(first)
359+
return metadata_plugins.album_for_id(first)
360360

361361

362362
def _recommendation(
@@ -511,7 +511,7 @@ def tag_album(
511511
if search_ids:
512512
for search_id in search_ids:
513513
log.debug("Searching for album ID: {0}", search_id)
514-
if info := plugins.album_for_id(search_id):
514+
if info := metadata_plugins.album_for_id(search_id):
515515
_add_candidate(items, candidates, info)
516516

517517
# Use existing metadata or text search.
@@ -548,7 +548,7 @@ def tag_album(
548548
log.debug("Album might be VA: {0}", va_likely)
549549

550550
# Get the results from the data sources.
551-
for matched_candidate in plugins.candidates(
551+
for matched_candidate in metadata_plugins.candidates(
552552
items, search_artist, search_album, va_likely
553553
):
554554
_add_candidate(items, candidates, matched_candidate)
@@ -583,7 +583,7 @@ def tag_item(
583583
if trackids:
584584
for trackid in trackids:
585585
log.debug("Searching for track ID: {0}", trackid)
586-
if info := plugins.track_for_id(trackid):
586+
if info := metadata_plugins.track_for_id(trackid):
587587
dist = track_distance(item, info, incl_artist=True)
588588
candidates[info.track_id] = hooks.TrackMatch(dist, info)
589589
# If this is a good match, then don't keep searching.
@@ -609,7 +609,7 @@ def tag_item(
609609
log.debug("Item search terms: {0} - {1}", search_artist, search_title)
610610

611611
# Get and evaluate candidate metadata.
612-
for track_info in plugins.item_candidates(
612+
for track_info in metadata_plugins.item_candidates(
613613
item, search_artist, search_title
614614
):
615615
dist = track_distance(item, track_info, incl_artist=True)

beets/metadata_plugins.py

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,32 @@ def track_for_id(_id: str) -> TrackInfo | None:
8484
return None
8585

8686

87+
def track_distance(item: Item, info: TrackInfo) -> Distance:
88+
"""Gets the track distance calculated by all loaded plugins.
89+
Returns a Distance object.
90+
"""
91+
from beets.autotag.hooks import Distance
92+
93+
dist = Distance()
94+
for plugin in find_metadata_source_plugins():
95+
dist.update(plugin.track_distance(item, info))
96+
return dist
97+
98+
99+
def album_distance(
100+
items: Sequence[Item],
101+
album_info: AlbumInfo,
102+
mapping: dict[Item, TrackInfo],
103+
) -> Distance:
104+
"""Returns the album distance calculated by plugins."""
105+
from beets.autotag.hooks import Distance
106+
107+
dist = Distance()
108+
for plugin in find_metadata_source_plugins():
109+
dist.update(plugin.album_distance(items, album_info, mapping))
110+
return dist
111+
112+
87113
def _get_distance(
88114
config: ConfigView, data_source: str, info: AlbumInfo | TrackInfo
89115
) -> Distance:
@@ -157,7 +183,7 @@ def track_for_id(self, track_id: str) -> TrackInfo | None:
157183
@abc.abstractmethod
158184
def candidates(
159185
self,
160-
items: list[Item],
186+
items: Sequence[Item],
161187
artist: str,
162188
album: str,
163189
va_likely: bool,
@@ -196,7 +222,7 @@ def item_candidates(
196222

197223
def album_distance(
198224
self,
199-
items: list[Item],
225+
items: Sequence[Item],
200226
album_info: AlbumInfo,
201227
mapping: dict[Item, TrackInfo],
202228
) -> Distance:
@@ -259,7 +285,7 @@ def _search_api(
259285

260286
def candidates(
261287
self,
262-
items: list[Item],
288+
items: Sequence[Item],
263289
artist: str,
264290
album: str,
265291
va_likely: bool,

beets/plugins.py

Lines changed: 0 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@
4141

4242
from confuse import ConfigView
4343

44-
from beets.autotag import AlbumInfo, Distance, TrackInfo
4544
from beets.dbcore import Query
4645
from beets.dbcore.db import FieldQueryType
4746
from beets.dbcore.types import Type
@@ -204,62 +203,6 @@ def queries(self) -> dict[str, type[Query]]:
204203
"""Return a dict mapping prefixes to Query subclasses."""
205204
return {}
206205

207-
def track_distance(
208-
self,
209-
item: Item,
210-
info: TrackInfo,
211-
) -> Distance:
212-
"""Should return a Distance object to be added to the
213-
distance for every track comparison.
214-
"""
215-
from beets.autotag.hooks import Distance
216-
217-
return Distance()
218-
219-
def album_distance(
220-
self,
221-
items: Sequence[Item],
222-
album_info: AlbumInfo,
223-
mapping: dict[Item, TrackInfo],
224-
) -> Distance:
225-
"""Should return a Distance object to be added to the
226-
distance for every album-level comparison.
227-
"""
228-
from beets.autotag.hooks import Distance
229-
230-
return Distance()
231-
232-
def candidates(
233-
self,
234-
items: list[Item],
235-
artist: str,
236-
album: str,
237-
va_likely: bool,
238-
extra_tags: dict[str, Any] | None = None,
239-
) -> Iterator[AlbumInfo]:
240-
"""Return :py:class:`AlbumInfo` candidates that match the given album.
241-
242-
:param items: List of items in the album
243-
:param artist: Album artist
244-
:param album: Album name
245-
:param va_likely: Whether the album is likely to be by various artists
246-
:param extra_tags: is a an optional dictionary of extra tags to search.
247-
Only relevant to :py:class:`MusicBrainzPlugin` autotagger and can be
248-
ignored by other plugins
249-
"""
250-
yield from ()
251-
252-
def item_candidates(
253-
self, item: Item, artist: str, title: str
254-
) -> Iterator[TrackInfo]:
255-
"""Return :py:class:`TrackInfo` candidates that match the given track.
256-
257-
:param item: Track item
258-
:param artist: Track artist
259-
:param title: Track title
260-
"""
261-
yield from ()
262-
263206
def add_media_field(
264207
self, name: str, descriptor: mediafile.MediaField
265208
) -> None:
@@ -438,32 +381,6 @@ def named_queries(model_cls: type[AnyModel]) -> dict[str, FieldQueryType]:
438381
return queries
439382

440383

441-
def track_distance(item: Item, info: TrackInfo) -> Distance:
442-
"""Gets the track distance calculated by all loaded plugins.
443-
Returns a Distance object.
444-
"""
445-
from beets.autotag.hooks import Distance
446-
447-
dist = Distance()
448-
for plugin in find_plugins():
449-
dist.update(plugin.track_distance(item, info))
450-
return dist
451-
452-
453-
def album_distance(
454-
items: Sequence[Item],
455-
album_info: AlbumInfo,
456-
mapping: dict[Item, TrackInfo],
457-
) -> Distance:
458-
"""Returns the album distance calculated by plugins."""
459-
from beets.autotag.hooks import Distance
460-
461-
dist = Distance()
462-
for plugin in find_plugins():
463-
dist.update(plugin.album_distance(items, album_info, mapping))
464-
return dist
465-
466-
467384
def notify_info_yielded(event: str) -> Callable[[IterF[P, Ret]], IterF[P, Ret]]:
468385
"""Makes a generator send the event 'event' every time it yields.
469386
This decorator is supposed to decorate a generator, but any function

0 commit comments

Comments
 (0)