import argparse
import logging
logger = logging.getLogger(__name__)
from .log import defaults as log_defaults
from .metadata import defaults as meta_defaults
[docs]def defaults():
r'''
Provides a list of standard-library ``ArgumentParser`` objects.
Currently provides defaults from
* :func:`tdg.cli.log.defaults`
* :func:`tdg.cli.metadata.defaults`
'''
return [
log_defaults(),
meta_defaults()
]
[docs]class ArgumentParser(argparse.ArgumentParser):
r'''
Forwards all arguments, except that it adds :func:`~.cli.defaults` to the `parents`_ option.
Parameters
----------
*args:
Forwarded to the standard library's ``ArgumentParser``.
*kwargs:
Forwarded to the standard library's ``ArgumentParser``.
.. _parents: https://docs.python.org/3/library/argparse.html#parents
'''
def __init__(self, *args, **kwargs):
k = {**kwargs}
if 'parents' in k:
k['parents'] += defaults()
else:
k['parents'] = defaults()
super().__init__(*args, **k)
[docs] def parse_args(self, args=None, namespace=None):
r'''
Forwards to the `standard library`_ but logs all the parsed values at the `DEBUG` level.
.. _standard library: https://docs.python.org/3/library/argparse.html#argparse.ArgumentParser.parse_args
'''
parsed = super().parse_args(args, namespace)
for arg in parsed.__dict__:
logger.debug(f'{arg}: {parsed.__dict__[arg]}')
return parsed