|
3 | 3 | """ |
4 | 4 |
|
5 | 5 |
|
6 | | -def get_kwargs_from_args(args, logger=None, base_kwargs={}, drop_default=True): |
7 | | - """ Get kwargs from argparser args. Drop default doesn't add init_argparser args. """ |
| 6 | +def get_kwargs_from_args(args, logger=None, base_kwargs={}, drop_base=True): |
| 7 | + """ Get kwargs from argparser args. |
| 8 | + Drop base doesn't add init_argparser args. """ |
8 | 9 | kwargs = base_kwargs.copy() |
9 | 10 | if logger is not None: |
10 | 11 | kwargs['logger'] = logger |
11 | 12 |
|
12 | 13 | for arg in vars(args): |
13 | | - if drop_default and arg in ['debug', 'verbose', 'version', 'log_file', 'log_level', 'log_time', 'no_log_color']: |
| 14 | + if drop_base and arg in ['debug', 'verbose', 'version', 'log_file', 'log_level', 'log_time', 'no_log_color']: |
14 | 15 | continue |
15 | 16 | value = getattr(args, arg) |
| 17 | + |
16 | 18 | if value is None: |
17 | 19 | continue |
18 | 20 |
|
@@ -85,23 +87,30 @@ def process_args(argparser, logger=None): |
85 | 87 | return args |
86 | 88 |
|
87 | 89 |
|
88 | | -def get_args_n_logger(package, description: str, arguments=[]): |
| 90 | +def get_args_n_logger(package, description: str, arguments=[], drop_default=True): |
89 | 91 | """ Takes a package name and description |
90 | 92 | If arguments are passed, they are added to argparser. |
91 | 93 | Returns the parsed args and logger. |
92 | 94 | """ |
| 95 | + from argparse import Namespace |
93 | 96 | argparser = init_argparser(prog=package, description=description) |
94 | 97 | logger = init_logger(package) |
95 | 98 |
|
96 | 99 | for arg in arguments: |
97 | 100 | dest = arg.pop('flags') |
| 101 | + if drop_default: |
| 102 | + arg['default'] = None |
98 | 103 | argparser.add_argument(*dest, **arg) |
99 | 104 |
|
100 | 105 | args = process_args(argparser, logger=logger) |
| 106 | + |
| 107 | + if drop_default: |
| 108 | + args = Namespace(**{name: value for name, value in vars(args).items() if value != argparser.get_default(name)}) |
| 109 | + |
101 | 110 | return args, logger |
102 | 111 |
|
103 | 112 |
|
104 | | -def get_kwargs(package, description: str, arguments=[], base_kwargs={}, drop_default=True): |
| 113 | +def get_kwargs(package, description: str, arguments=[], base_kwargs={}, drop_default=True, drop_base=True): |
105 | 114 | """ Like get_args_n_logger, but only returns kwargs """ |
106 | | - args, logger = get_args_n_logger(package, description, arguments) |
107 | | - return get_kwargs_from_args(args, logger=logger, base_kwargs=base_kwargs, drop_default=drop_default) |
| 115 | + args, logger = get_args_n_logger(package, description, arguments, drop_default=drop_default) |
| 116 | + return get_kwargs_from_args(args, logger=logger, base_kwargs=base_kwargs, drop_base=drop_base) |
0 commit comments