from argparse import ArgumentParser, _ArgumentGroup, _SubParsersAction from typing import Optional def find_argument_group(program : ArgumentParser, group_name : str) -> Optional[_ArgumentGroup]: for group in program._action_groups: if group.title == group_name: return group return None def validate_args(program : ArgumentParser) -> bool: if validate_actions(program): for action in program._actions: if isinstance(action, _SubParsersAction): for _, sub_program in action._name_parser_map.items(): if not validate_args(sub_program): return False return True return False def validate_actions(program : ArgumentParser) -> bool: for action in program._actions: if action.default and action.choices: if isinstance(action.default, list): if any(default not in action.choices for default in action.default): return False elif action.default not in action.choices: return False return True