in nubia/internal/typing/argparse.py [0:0]
def _resolve_subparsers(parser):
# a subparser resulting from parser.add_subparsers was inputted
if isinstance(parser, argparse._SubParsersAction):
subparsers = parser
# an actual parser was inputted
elif isinstance(parser, argparse.ArgumentParser):
# Unfortunately there is no method to get the current subparsers apart
# from reading the private property. Trying to call
# parser.add_subparsers a second time will result in a SystemExit error.
# Also when you call parser.add_subparsers you get an Action object,
# that is listed under parser._subparsers._actions.
# Argparse is a beautiful thing
if getattr(parser, "_subparsers", None):
subparsers = parser._subparsers._actions[-1]
else:
subparsers = parser.add_subparsers(dest="_cmd", help="Subcommand to run")
else:
raise ValueError(
"Expected an argparse.ArgumentParser or an "
"argparse._SubParsersAction as input"
)
return subparsers