Skip to content

Commit 67188c1

Browse files
committed
add option to drop unset kwargs
Signed-off-by: Zen <[email protected]>
1 parent 0ca2538 commit 67188c1

File tree

2 files changed

+17
-8
lines changed

2 files changed

+17
-8
lines changed

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
44

55
[project]
66
name = "zenlib"
7-
version = "1.7.2"
7+
version = "1.7.3"
88
authors = [
99
{ name="Desultory", email="[email protected]" },
1010
]

src/zenlib/util/main_funcs.py

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,18 @@
33
"""
44

55

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. """
89
kwargs = base_kwargs.copy()
910
if logger is not None:
1011
kwargs['logger'] = logger
1112

1213
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']:
1415
continue
1516
value = getattr(args, arg)
17+
1618
if value is None:
1719
continue
1820

@@ -85,23 +87,30 @@ def process_args(argparser, logger=None):
8587
return args
8688

8789

88-
def get_args_n_logger(package, description: str, arguments=[]):
90+
def get_args_n_logger(package, description: str, arguments=[], drop_default=True):
8991
""" Takes a package name and description
9092
If arguments are passed, they are added to argparser.
9193
Returns the parsed args and logger.
9294
"""
95+
from argparse import Namespace
9396
argparser = init_argparser(prog=package, description=description)
9497
logger = init_logger(package)
9598

9699
for arg in arguments:
97100
dest = arg.pop('flags')
101+
if drop_default:
102+
arg['default'] = None
98103
argparser.add_argument(*dest, **arg)
99104

100105
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+
101110
return args, logger
102111

103112

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):
105114
""" 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

Comments
 (0)