in nubia/internal/typing/argparse.py [0:0]
def _argument_to_argparse_input(arg: "Any") -> "Tuple[List, Dict[str, Any]]":
add_argument_kwargs = {"help": arg.description}
if arg.positional:
add_argument_args = [arg.name]
if arg.extra_names:
msg = "Aliases are not yet supported for positional arguments @ {}".format(
arg.name
)
raise ValueError(msg)
if arg.default_value_set:
msg = (
"Positional arguments with default values are "
"not supported @ {}".format(arg.name)
)
raise ValueError(msg)
else:
add_argument_args = [
transform_argument_name(x) for x in ([arg.name] + arg.extra_names)
]
add_argument_kwargs["default"] = arg.default_value
add_argument_kwargs["required"] = not arg.default_value_set
argument_type = (
arg.type
if not is_optional_type(arg.type)
else get_first_type_argument(arg.type)
)
if argument_type in [int, float, str]:
add_argument_kwargs["type"] = argument_type
add_argument_kwargs["metavar"] = str(argument_type.__name__).upper()
elif argument_type == bool or arg.default_value is False:
add_argument_kwargs["action"] = "store_true"
elif arg.default_value is True:
add_argument_kwargs["action"] = "store_false"
elif is_mapping_type(argument_type):
add_argument_kwargs["type"] = _parse_dict(argument_type)
add_argument_kwargs["metavar"] = "DICT[{}: {}]".format(
*get_dict_kv_arg_type_as_str(argument_type)
)
elif is_iterable_type(argument_type):
add_argument_kwargs["type"] = get_first_type_argument(argument_type)
add_argument_kwargs["nargs"] = "+"
add_argument_kwargs["metavar"] = "{}".format(
get_list_arg_type_as_str(argument_type)
)
else:
add_argument_kwargs["type"] = argument_type
if arg.choices:
add_argument_kwargs["choices"] = arg.choices
add_argument_kwargs["metavar"] = "{{{}}}".format(
",".join(map(str, arg.choices))
)
if arg.positional and "metavar" in add_argument_kwargs:
add_argument_kwargs["metavar"] = "{}<{}>".format(
arg.name, add_argument_kwargs["metavar"]
)
return add_argument_args, add_argument_kwargs