|
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 |
|
|