@@ -26,7 +26,12 @@ def get_args(t):
2626
2727
2828from .util .cli .arg import Arg
29- from .util .data import traverse_config_set , traverse_config_get , type_lookup
29+ from .util .data import (
30+ traverse_config_set ,
31+ traverse_config_get ,
32+ type_lookup ,
33+ export_dict ,
34+ )
3035
3136from .util .entrypoint import Entrypoint
3237
@@ -221,6 +226,10 @@ def field(description: str, *args, metadata: Optional[dict] = None, **kwargs):
221226 return dataclasses .field (* args , metadata = metadata , ** kwargs )
222227
223228
229+ def config_asdict (self , * args , ** kwargs ):
230+ return export_dict (** dataclasses .asdict (self , * args , ** kwargs ))
231+
232+
224233def config (cls ):
225234 """
226235 Decorator to create a dataclass
@@ -230,9 +239,7 @@ def config(cls):
230239 datacls ._replace = lambda self , * args , ** kwargs : dataclasses .replace (
231240 self , * args , ** kwargs
232241 )
233- datacls ._asdict = lambda self , * args , ** kwargs : dataclasses .asdict (
234- self , * args , ** kwargs
235- )
242+ datacls ._asdict = config_asdict
236243 return datacls
237244
238245
@@ -249,12 +256,7 @@ def make_config(cls_name: str, fields, *args, namespace=None, **kwargs):
249256 self , * args , ** kwargs
250257 ),
251258 )
252- namespace .setdefault (
253- "_asdict" ,
254- lambda self , * args , ** kwargs : dataclasses .asdict (
255- self , * args , ** kwargs
256- ),
257- )
259+ namespace .setdefault ("_asdict" , config_asdict )
258260 kwargs ["eq" ] = True
259261 kwargs ["init" ] = True
260262 # Ensure non-default arguments always come before default arguments
0 commit comments