@@ -477,6 +477,14 @@ def wrapper() -> Any:
477
477
sig = inspect .signature (func )
478
478
parser = argparse .ArgumentParser (func .__doc__ )
479
479
480
+ # Add loglevel argument with current logger level as default
481
+ parser .add_argument (
482
+ "--loglevel" ,
483
+ type = str ,
484
+ default = logging ._levelToName [logger .level ],
485
+ help = "Set the logging level (e.g. info, debug, warning, error)" ,
486
+ )
487
+
480
488
seen_args = set () # track all --<name> we've added
481
489
482
490
for _name , param in sig .parameters .items ():
@@ -487,7 +495,8 @@ def wrapper() -> Any:
487
495
for f in fields (cls ):
488
496
arg_name = f .name
489
497
if arg_name in seen_args :
490
- parser .error (f"Duplicate argument { arg_name } " )
498
+ logger .warning (f"WARNING: duplicate argument { arg_name } " )
499
+ continue
491
500
seen_args .add (arg_name )
492
501
493
502
ftype = f .type
@@ -521,14 +530,20 @@ def wrapper() -> Any:
521
530
parser .add_argument (f"--{ arg_name } " , ** arg_kwargs )
522
531
523
532
args = parser .parse_args ()
533
+ logger .setLevel (logging .INFO )
524
534
525
535
# Build the dataclasses
526
536
kwargs = {}
527
537
for name , param in sig .parameters .items ():
528
538
cls = param .annotation
529
539
if is_dataclass (cls ):
530
540
data = {f .name : getattr (args , f .name ) for f in fields (cls )}
531
- kwargs [name ] = cls (** data ) # pyre-ignore [29]
541
+ config_instance = cls (** data ) # pyre-ignore [29]
542
+ kwargs [name ] = config_instance
543
+ logger .info (config_instance )
544
+
545
+ loglevel = logging ._nameToLevel [args .loglevel .upper ()]
546
+ logger .setLevel (loglevel )
532
547
533
548
return func (** kwargs )
534
549
0 commit comments