Source code for ewoksutils.cli_utils.cli_argparse
import argparse
from typing import List
from .cli_spec import CLIArg
[docs]
def add_to_parser(parser: argparse.ArgumentParser, args_list: List[CLIArg]) -> None:
"""Render abstract args into an argparse parser.
.. code-block:: python
parser = argparse.ArgumentParser(description="CLI interface")
subparsers = parser.add_subparsers(help="Commands", dest="command")
mycommand = subparsers.add_parser(
"mycommand",
help="Description of command",
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
)
add_to_parser(mycommand, [...])
"""
for cli_arg in args_list:
if "-" in cli_arg.dest:
raise ValueError(f"{cli_arg.dest!r} is not a valid python variable name")
kwargs = {"help": cli_arg.help}
if cli_arg.default is not None:
kwargs["default"] = cli_arg.default
if cli_arg.choices is not None:
kwargs["choices"] = cli_arg.choices
if cli_arg.metavar is not None:
kwargs["metavar"] = cli_arg.metavar
if cli_arg.nargs is not None:
kwargs["nargs"] = cli_arg.nargs
if cli_arg.required is not None:
kwargs["required"] = cli_arg.required
if cli_arg.action is not None:
kwargs["action"] = cli_arg.action
if cli_arg.type is not None:
kwargs["type"] = cli_arg.type
if cli_arg.is_positional:
parser.add_argument(cli_arg.dest, **kwargs)
else:
parser.add_argument(*cli_arg.flags, dest=cli_arg.dest, **kwargs)