@@ -137,7 +137,8 @@ def __init__(self) -> None:
137137 "prefer_specific" : False ,
138138 "title_case" : True ,
139139 "pretend" : False ,
140- "ignorelist" : False ,
140+ "ignorelist" : {},
141+ "aliases" : True ,
141142 }
142143 )
143144 self .setup ()
@@ -267,38 +268,47 @@ def _load_aliases(self) -> Aliases:
267268 The key (genre name) is used as a ``re.Match.expand()`` template,
268269 so ``\\ g<N>`` back-references to capture groups are supported.
269270
270- Setting ``aliases: true`` loads the bundled ``aliases.yaml`` file. Setting
271- ``aliases: false`` disables normalization entirely.
271+ Setting ``aliases: true`` (the default) loads the bundled
272+ ``aliases.yaml`` file. Setting ``aliases: false`` disables
273+ normalization entirely.
272274
273275 Raises:
274- UserError: if the config value is not a mapping, or if an entry's value is
275- not a list of strings .
276+ confuse.ConfigTypeError: when the config value is not a mapping
277+ or a list entry is not a string .
276278 """
277- aliases_config = self .config ["aliases" ].get ()
278- if aliases_config is False :
279+ aliases_raw = self .config ["aliases" ].get ()
280+ if aliases_raw is False :
279281 return []
280- if aliases_config in (True , "" , None ):
282+ if aliases_raw in (True , "" , None ):
281283 self ._log .debug ("Loading default aliases from {}" , ALIASES )
282284 with Path (ALIASES ).open (encoding = "utf-8" ) as f :
283- aliases_config = yaml .safe_load (f )
284- if not aliases_config :
285+ aliases_dict = yaml .safe_load (f )
286+ if not aliases_dict :
285287 return []
286- if not isinstance (aliases_config , dict ):
287- raise UserError (
288- "Invalid value for lastgenre.aliases: expected a mapping "
289- f"(canonical -> list of patterns), got { aliases_config !r} "
288+ else :
289+ # Validate only the effective aliases value to avoid stale lower-
290+ # priority config layers affecting type checking.
291+ aliases_cfg = confuse .Configuration ("lastgenre_aliases" , read = False )
292+ aliases_cfg .set ({"aliases" : aliases_raw })
293+ aliases_dict = aliases_cfg ["aliases" ].get (
294+ confuse .MappingValues (confuse .Sequence (str ))
290295 )
291296
292297 entries : Aliases = []
293- for canonical , patterns in aliases_config .items ():
294- if not isinstance (patterns , list ):
295- raise UserError (
296- f"Invalid lastgenre.aliases entry for { canonical !r} : "
297- f"expected a list of patterns, got { patterns !r} "
298- )
298+ for canonical , patterns in aliases_dict .items ():
299299 template = str (canonical ).lower ()
300- for raw in patterns :
301- entries .append ((self ._compile_pattern (str (raw )), template ))
300+ for raw_pat in patterns :
301+ try :
302+ entries .append (
303+ (re .compile (str (raw_pat ), re .IGNORECASE ), template )
304+ )
305+ except re .error :
306+ entries .append (
307+ (
308+ re .compile (re .escape (str (raw_pat )), re .IGNORECASE ),
309+ template ,
310+ )
311+ )
302312
303313 self ._log .extra_debug ("Loaded {} alias entries" , len (entries ))
304314 return entries
0 commit comments