@@ -136,17 +136,18 @@ class Info(AttrDict[Any]):
136136
137137 IGNORED_FIELDS : ClassVar [set [str ]] = {"data_url" }
138138 MEDIA_FIELD_MAP : ClassVar [dict [str , str ]] = {}
139+ LEGACY_TO_LIST_FIELD : ClassVar [dict [str , str ]] = {"genre" : "genres" }
139140
140141 @cached_classproperty
141142 def nullable_fields (cls ) -> set [str ]:
142143 """Return fields that may be cleared when new metadata is applied."""
143144 return set (config ["overwrite_null" ][cls .type .lower ()].as_str_seq ())
144145
145146 def __setitem__ (self , key : str , value : Any ) -> None :
146- # handle info.genre = "abc" and info["genre "] = "abc"
147- if key == "genre" :
148- self ["genres" ] = self ._get_list_from_string_value (
149- "genre" , "genres" , value , self ["genres" ]
147+ # handle legacy info.str_field = "abc" and info["str_field "] = "abc"
148+ if list_field := self . LEGACY_TO_LIST_FIELD . get ( key ) :
149+ self [list_field ] = self ._get_list_from_string_value (
150+ key , list_field , value , self [list_field ]
150151 )
151152 else :
152153 super ().__setitem__ (key , value )
@@ -387,23 +388,13 @@ class TrackInfo(Info):
387388 "track_id" : "mb_trackid" ,
388389 "medium_index" : "track" ,
389390 }
390-
391- def __setitem__ (self , key : str , value : Any ) -> None :
392- # handle info.remixer = "abc" and info["remixer"] = "abc"
393- if key == "remixer" :
394- self ["remixers" ] = self ._get_list_from_string_value (
395- "remixer" , "remixers" , value , self ["remixers" ]
396- )
397- elif key == "lyricist" :
398- self ["lyricists" ] = self ._get_list_from_string_value (
399- "lyricist" , "lyricists" , value , self ["lyricists" ]
400- )
401- elif key == "composer" :
402- self ["composers" ] = self ._get_list_from_string_value (
403- "composer" , "composers" , value , self ["composers" ]
404- )
405- else :
406- super ().__setitem__ (key , value )
391+ LEGACY_TO_LIST_FIELD : ClassVar [dict [str , str ]] = {
392+ ** Info .LEGACY_TO_LIST_FIELD ,
393+ "remixer" : "remixers" ,
394+ "lyricist" : "lyricists" ,
395+ "composer" : "composers" ,
396+ "arranger" : "arrangers" ,
397+ }
407398
408399 @property
409400 def id (self ) -> str | None :
@@ -438,7 +429,7 @@ def raw_data(self) -> JSONDict:
438429 def __init__ (
439430 self ,
440431 * ,
441- arranger : str | None = None ,
432+ arrangers : list [ str ] | None = None ,
442433 bpm : str | None = None ,
443434 composers : list [str ] | None = None ,
444435 composer_sort : str | None = None ,
@@ -460,7 +451,7 @@ def __init__(
460451 work_disambig : str | None = None ,
461452 ** kwargs ,
462453 ) -> None :
463- self .arranger = arranger
454+ self .arrangers = arrangers
464455 self .bpm = bpm
465456 self .composers = composers
466457 self .composer_sort = composer_sort
0 commit comments