| """Utilities for argparse_translator module.""" |
|
|
| from argparse import Action, ArgumentParser |
| from typing import List, Optional, Tuple |
|
|
|
|
| def in_group(parser: ArgumentParser, argument_name: str, group_title: str) -> bool: |
| """Check if an argument is in a group of an ArgumentParser.""" |
| for action_group in parser._action_groups: |
| if action_group.title == group_title: |
| for ( |
| action |
| ) in action_group._group_actions: |
| opts = action.option_strings |
| if (opts and opts[0] == argument_name) or action.dest == argument_name: |
| return True |
| return False |
|
|
|
|
| def remove_argument(parser: ArgumentParser, argument_name: str) -> List[Optional[str]]: |
| """Remove an argument from an ArgumentParser.""" |
| groups_w_arg = [] |
|
|
| |
| for action in parser._actions: |
| opts = action.option_strings |
| if (opts and opts[0] == argument_name) or action.dest == argument_name: |
| parser._remove_action(action) |
| break |
|
|
| |
| for action_group in parser._action_groups: |
| for action in action_group._group_actions: |
| opts = action.option_strings |
| if (opts and opts[0] == argument_name) or action.dest == argument_name: |
| action_group._group_actions.remove( |
| action |
| ) |
| groups_w_arg.append(action_group.title) |
|
|
| |
| parser._option_string_actions.pop( |
| f"--{argument_name}", None |
| ) |
|
|
| return groups_w_arg |
|
|
|
|
| def get_argument_choices(parser: ArgumentParser, argument_name: str) -> Tuple: |
| """Get the choices of an argument from an ArgumentParser.""" |
| for action in parser._actions: |
| opts = action.option_strings |
| if (opts and opts[0] == argument_name) or action.dest == argument_name: |
| return tuple(action.choices or ()) |
| return () |
|
|
|
|
| def get_argument_optional_choices(parser: ArgumentParser, argument_name: str) -> bool: |
| """Get the optional_choices attribute of an argument from an ArgumentParser.""" |
| for action in parser._actions: |
| opts = action.option_strings |
| if ( |
| (opts and opts[0] == argument_name) |
| or action.dest == argument_name |
| and hasattr(action, "optional_choices") |
| ): |
| return ( |
| action.optional_choices |
| ) |
| return False |
|
|
|
|
| def set_optional_choices(action: Action, optional_choices: bool): |
| """Set the optional_choices attribute of an action.""" |
| if not hasattr(action, "optional_choices") and optional_choices: |
| setattr(action, "optional_choices", optional_choices) |
|
|