27
27
import traceback
28
28
from functools import cache
29
29
from string import ascii_lowercase
30
- from typing import TYPE_CHECKING
30
+ from typing import TYPE_CHECKING , Sequence
31
31
32
32
import confuse
33
33
from discogs_client import Client , Master , Release
40
40
from beets import config
41
41
from beets .autotag .distance import string_dist
42
42
from beets .autotag .hooks import AlbumInfo , TrackInfo
43
- from beets .plugins import BeetsPlugin , MetadataSourcePlugin , get_distance
44
- from beets .util .id_extractors import extract_release_id
43
+ from beets .metadata_plugins import MetadataSourcePlugin
45
44
46
45
if TYPE_CHECKING :
47
46
from collections .abc import Callable , Iterable
@@ -84,7 +83,7 @@ class ReleaseFormat(TypedDict):
84
83
descriptions : list [str ] | None
85
84
86
85
87
- class DiscogsPlugin (BeetsPlugin ):
86
+ class DiscogsPlugin (MetadataSourcePlugin ):
88
87
def __init__ (self ):
89
88
super ().__init__ ()
90
89
self .config .add (
@@ -169,20 +168,8 @@ def authenticate(self, c_key, c_secret):
169
168
170
169
return token , secret
171
170
172
- def album_distance (self , items , album_info , mapping ):
173
- """Returns the album distance."""
174
- return get_distance (
175
- data_source = "Discogs" , info = album_info , config = self .config
176
- )
177
-
178
- def track_distance (self , item , track_info ):
179
- """Returns the track distance."""
180
- return get_distance (
181
- data_source = "Discogs" , info = track_info , config = self .config
182
- )
183
-
184
171
def candidates (
185
- self , items : list [Item ], artist : str , album : str , va_likely : bool
172
+ self , items : Sequence [Item ], artist : str , album : str , va_likely : bool
186
173
) -> Iterable [AlbumInfo ]:
187
174
return self .get_albums (f"{ artist } { album } " if va_likely else album )
188
175
@@ -217,7 +204,7 @@ def album_for_id(self, album_id: str) -> AlbumInfo | None:
217
204
"""
218
205
self ._log .debug ("Searching for release {0}" , album_id )
219
206
220
- discogs_id = extract_release_id ("discogs" , album_id )
207
+ discogs_id = self . extract_release_id (album_id )
221
208
222
209
if not discogs_id :
223
210
return None
@@ -272,7 +259,7 @@ def get_albums(self, query: str) -> Iterable[AlbumInfo]:
272
259
exc_info = True ,
273
260
)
274
261
return []
275
- return map (self .get_album_info , releases )
262
+ return filter ( None , map (self .get_album_info , releases ) )
276
263
277
264
@cache
278
265
def get_master_year (self , master_id : str ) -> int | None :
@@ -334,7 +321,7 @@ def get_album_info(self, result):
334
321
self ._log .warning ("Release does not contain the required fields" )
335
322
return None
336
323
337
- artist , artist_id = MetadataSourcePlugin .get_artist (
324
+ artist , artist_id = self .get_artist (
338
325
[a .data for a in result .artists ], join_key = "join"
339
326
)
340
327
album = re .sub (r" +" , " " , result .title )
@@ -359,7 +346,7 @@ def get_album_info(self, result):
359
346
else :
360
347
genre = base_genre
361
348
362
- discogs_albumid = extract_release_id ("discogs" , result .data .get ("uri" ))
349
+ discogs_albumid = self . extract_release_id (result .data .get ("uri" ))
363
350
364
351
# Extract information for the optional AlbumInfo fields that are
365
352
# contained on nested discogs fields.
@@ -419,7 +406,7 @@ def get_album_info(self, result):
419
406
genre = genre ,
420
407
media = media ,
421
408
original_year = original_year ,
422
- data_source = "Discogs" ,
409
+ data_source = self . data_source ,
423
410
data_url = data_url ,
424
411
discogs_albumid = discogs_albumid ,
425
412
discogs_labelid = labelid ,
@@ -638,7 +625,7 @@ def get_track_info(self, track, index, divisions):
638
625
title = f"{ prefix } : { title } "
639
626
track_id = None
640
627
medium , medium_index , _ = self .get_track_index (track ["position" ])
641
- artist , artist_id = MetadataSourcePlugin .get_artist (
628
+ artist , artist_id = self .get_artist (
642
629
track .get ("artists" , []), join_key = "join"
643
630
)
644
631
length = self .get_track_length (track ["duration" ])
0 commit comments