@@ -128,17 +128,18 @@ class Info(AttrDict[Any]):
128128
129129 IGNORED_FIELDS : ClassVar [set [str ]] = {"data_url" }
130130 MEDIA_FIELD_MAP : ClassVar [dict [str , str ]] = {}
131+ LIST_BY_LEGACY_FIELD : ClassVar [dict [str , str ]] = {"genre" : "genres" }
131132
132133 @cached_classproperty
133134 def nullable_fields (cls ) -> set [str ]:
134135 """Return fields that may be cleared when new metadata is applied."""
135136 return set (config ["overwrite_null" ][cls .type .lower ()].as_str_seq ())
136137
137138 def __setitem__ (self , key : str , value : Any ) -> None :
138- # handle info.genre = "abc" and info["genre "] = "abc"
139- if key == "genre" :
140- self ["genres" ] = self ._get_list_from_string_value (
141- "genre" , "genres" , value , self ["genres" ]
139+ # handle legacy info.str_field = "abc" and info["str_field "] = "abc"
140+ if list_field := self . LIST_BY_LEGACY_FIELD . get ( key ) :
141+ self [list_field ] = self ._get_list_from_string_value (
142+ key , list_field , value , self [list_field ]
142143 )
143144 else :
144145 super ().__setitem__ (key , value )
@@ -379,23 +380,13 @@ class TrackInfo(Info):
379380 "track_id" : "mb_trackid" ,
380381 "medium_index" : "track" ,
381382 }
382-
383- def __setitem__ (self , key : str , value : Any ) -> None :
384- # handle info.remixer = "abc" and info["remixer"] = "abc"
385- if key == "remixer" :
386- self ["remixers" ] = self ._get_list_from_string_value (
387- "remixer" , "remixers" , value , self ["remixers" ]
388- )
389- elif key == "lyricist" :
390- self ["lyricists" ] = self ._get_list_from_string_value (
391- "lyricist" , "lyricists" , value , self ["lyricists" ]
392- )
393- elif key == "composer" :
394- self ["composers" ] = self ._get_list_from_string_value (
395- "composer" , "composers" , value , self ["composers" ]
396- )
397- else :
398- super ().__setitem__ (key , value )
383+ LIST_BY_LEGACY_FIELD : ClassVar [dict [str , str ]] = {
384+ ** Info .LIST_BY_LEGACY_FIELD ,
385+ "remixer" : "remixers" ,
386+ "lyricist" : "lyricists" ,
387+ "composer" : "composers" ,
388+ "arranger" : "arrangers" ,
389+ }
399390
400391 @property
401392 def id (self ) -> str | None :
@@ -430,7 +421,7 @@ def raw_data(self) -> JSONDict:
430421 def __init__ (
431422 self ,
432423 * ,
433- arranger : str | None = None ,
424+ arrangers : list [ str ] | None = None ,
434425 bpm : str | None = None ,
435426 composers : list [str ] | None = None ,
436427 composer_sort : str | None = None ,
@@ -452,7 +443,7 @@ def __init__(
452443 work_disambig : str | None = None ,
453444 ** kwargs ,
454445 ) -> None :
455- self .arranger = arranger
446+ self .arrangers = arrangers
456447 self .bpm = bpm
457448 self .composers = composers
458449 self .composer_sort = composer_sort
0 commit comments