@@ -124,6 +124,17 @@ class AlbumArtistInfo(ArtistInfo):
124124 albumartists_ids : list [str ]
125125
126126
127+ class TracklistInfo :
128+ def __init__ (self ):
129+ self .index : int = 0
130+ self .index_tracks : dict [int , str ] = {}
131+ self .tracks : list [TrackInfo ] = []
132+ self .divisions : list [str ] = []
133+ self .next_divisions : list [str ] = []
134+ self .mediums : list [str | None ] = []
135+ self .medium_indices : list [str | None ] = []
136+
137+
127138class DiscogsPlugin (MetadataSourcePlugin ):
128139 def __init__ (self ):
129140 super ().__init__ ()
@@ -371,7 +382,6 @@ def build_albumartistinfo(self, artists: list[Artist]) -> AlbumArtistInfo:
371382 "albumartist" : info ["artist" ],
372383 "albumartist_id" : info ["artist_id" ],
373384 "albumartists" : info ["artists" ],
374- "albumartists_ids" : info ["artists_ids" ],
375385 "albumartist_credit" : info ["artist_credit" ],
376386 "albumartists_credit" : info ["artists_credit" ],
377387 }
@@ -386,12 +396,6 @@ def build_artistinfo(
386396 """Iterates through a discogs result and builds
387397 up the artist fields. Does not contribute to
388398 artist_sort as Discogs does not define that.
389-
390- :param artists: A list of Discogs Artist objects
391-
392- :param album_artist: If building an album artist,
393- we need to account for the album_artist anv parameter.
394- :return an ArtistInfo dictionary.
395399 """
396400 info : ArtistInfo = {
397401 "artist" : "" ,
@@ -420,7 +424,7 @@ def build_artistinfo(
420424 for a in given_artists :
421425 # Get the artist name
422426 name = self .strip_disambiguation (a ["name" ])
423- discogs_id = a ["id" ]
427+ discogs_id = str ( a ["id" ])
424428 anv = a .get ("anv" , name )
425429 role = a .get ("role" , "" ).lower ()
426430 # Check if the artist is Various
@@ -621,63 +625,41 @@ def _process_clean_tracklist(
621625 self ,
622626 clean_tracklist : list [Track ],
623627 albumartistinfo : ArtistInfo ,
624- ) -> tuple [
625- list [TrackInfo ],
626- dict [int , str ],
627- int ,
628- list [str ],
629- list [str ],
630- list [str | None ],
631- list [str | None ],
632- ]:
628+ ) -> TracklistInfo :
633629 # Distinct works and intra-work divisions, as defined by index tracks.
634- tracks : list [TrackInfo ] = []
635- mediums : list [str | None ] = []
636- medium_indices : list [str | None ] = []
637- index_tracks = {}
638- index = 0
639- divisions : list [str ] = []
640- next_divisions : list [str ] = []
630+ t = TracklistInfo ()
641631 for track in clean_tracklist :
642632 # Only real tracks have `position`. Otherwise, it's an index track.
643633 if track ["position" ]:
644- index += 1
645- if next_divisions :
634+ t . index += 1
635+ if t . next_divisions :
646636 # End of a block of index tracks: update the current
647637 # divisions.
648- divisions += next_divisions
649- del next_divisions [:]
638+ t . divisions += t . next_divisions
639+ del t . next_divisions [:]
650640 track_info , medium , medium_index = self .get_track_info (
651- track , index , divisions , albumartistinfo
641+ track , t . index , t . divisions , albumartistinfo
652642 )
653643 track_info .track_alt = track ["position" ]
654- tracks .append (track_info )
644+ t . tracks .append (track_info )
655645 if medium :
656- mediums .append (medium )
646+ t . mediums .append (medium )
657647 else :
658- mediums .append (None )
648+ t . mediums .append (None )
659649 if medium_index :
660- medium_indices .append (medium_index )
650+ t . medium_indices .append (medium_index )
661651 else :
662- medium_indices .append (None )
652+ t . medium_indices .append (None )
663653 else :
664- next_divisions .append (track ["title" ])
654+ t . next_divisions .append (track ["title" ])
665655 # We expect new levels of division at the beginning of the
666656 # tracklist (and possibly elsewhere).
667657 try :
668- divisions .pop ()
658+ t . divisions .pop ()
669659 except IndexError :
670660 pass
671- index_tracks [index + 1 ] = track ["title" ]
672- return (
673- tracks ,
674- index_tracks ,
675- index ,
676- divisions ,
677- next_divisions ,
678- mediums ,
679- medium_indices ,
680- )
661+ t .index_tracks [t .index + 1 ] = track ["title" ]
662+ return t
681663
682664 def get_tracks (
683665 self ,
@@ -694,18 +676,9 @@ def get_tracks(
694676 self ._log .debug ("{}" , traceback .format_exc ())
695677 self ._log .error ("uncaught exception in coalesce_tracks: {}" , exc )
696678 clean_tracklist = tracklist
697- processed = self ._process_clean_tracklist (
679+ t : TracklistInfo = self ._process_clean_tracklist (
698680 clean_tracklist , albumartistinfo
699681 )
700- (
701- tracks ,
702- index_tracks ,
703- index ,
704- divisions ,
705- next_divisions ,
706- mediums ,
707- medium_indices ,
708- ) = processed
709682 # Fix up medium and medium_index for each track. Discogs position is
710683 # unreliable, but tracks are in order.
711684 medium = None
@@ -714,22 +687,24 @@ def get_tracks(
714687
715688 # If a medium has two sides (ie. vinyl or cassette), each pair of
716689 # consecutive sides should belong to the same medium.
717- if all ([medium is not None for medium in mediums ]):
718- m = sorted ({medium .lower () if medium else "" for medium in mediums })
690+ if all ([medium is not None for medium in t .mediums ]):
691+ m = sorted (
692+ {medium .lower () if medium else "" for medium in t .mediums }
693+ )
719694 # If all track.medium are single consecutive letters, assume it is
720695 # a 2-sided medium.
721696 if "" .join (m ) in ascii_lowercase :
722697 sides_per_medium = 2
723698
724- for i , track in enumerate (tracks ):
699+ for i , track in enumerate (t . tracks ):
725700 # Handle special case where a different medium does not indicate a
726701 # new disc, when there is no medium_index and the ordinal of medium
727702 # is not sequential. For example, I, II, III, IV, V. Assume these
728703 # are the track index, not the medium.
729704 # side_count is the number of mediums or medium sides (in the case
730705 # of two-sided mediums) that were seen before.
731- medium_str = mediums [i ]
732- medium_index = medium_indices [i ]
706+ medium_str = t . mediums [i ]
707+ medium_index = t . medium_indices [i ]
733708 medium_is_index = (
734709 medium_str
735710 and not medium_index
@@ -760,15 +735,15 @@ def get_tracks(
760735
761736 # Get `disctitle` from Discogs index tracks. Assume that an index track
762737 # before the first track of each medium is a disc title.
763- for track in tracks :
738+ for track in t . tracks :
764739 if track .medium_index == 1 :
765- if track .index in index_tracks :
766- disctitle = index_tracks [track .index ]
740+ if track .index in t . index_tracks :
741+ disctitle = t . index_tracks [track .index ]
767742 else :
768743 disctitle = None
769744 track .disctitle = disctitle
770745
771- return tracks
746+ return t . tracks
772747
773748 def coalesce_tracks (self , raw_tracklist : list [Track ]) -> list [Track ]:
774749 """Pre-process a tracklist, merging subtracks into a single track. The
0 commit comments