8888 Path ,
8989 argument_error ,
9090 change_to_path_dir ,
91+ get_argument_group_class ,
9192 get_private_kwargs ,
9293 identity ,
9394 return_parser_if_captured ,
102103class ActionsContainer (SignatureArguments , argparse ._ActionsContainer ):
103104 """Extension of argparse._ActionsContainer to support additional functionalities."""
104105
105- _action_groups : Sequence ["_ArgumentGroup " ] # type: ignore[assignment]
106+ _action_groups : Sequence ["ArgumentGroup " ] # type: ignore[assignment]
106107
107108 def __init__ (self , * args , ** kwargs ) -> None :
108109 super ().__init__ (* args , ** kwargs )
@@ -154,7 +155,7 @@ def add_argument(self, *args, enable_path: bool = False, **kwargs):
154155 action .required = False
155156 return action
156157
157- def add_argument_group (self , * args , name : Optional [str ] = None , ** kwargs ) -> "_ArgumentGroup " :
158+ def add_argument_group (self , * args , name : Optional [str ] = None , ** kwargs ) -> "ArgumentGroup " :
158159 """Adds a group to the parser.
159160
160161 All the arguments from `argparse.ArgumentParser.add_argument_group
@@ -173,7 +174,8 @@ def add_argument_group(self, *args, name: Optional[str] = None, **kwargs) -> "_A
173174 parser = self .parser if hasattr (self , "parser" ) else self
174175 if name is not None and name in parser .groups : # type: ignore[union-attr]
175176 raise ValueError (f"Group with name { name } already exists." )
176- group = _ArgumentGroup (parser , * args , logger = parser ._logger , ** kwargs )
177+ group_class = getattr (parser , "_group_class" , ArgumentGroup )
178+ group = group_class (parser , * args , logger = parser ._logger , ** kwargs )
177179 group .parser = parser
178180 parser ._action_groups .append (group ) # type: ignore[union-attr]
179181 if name is not None :
@@ -208,7 +210,7 @@ def set_defaults(self, *args: Dict[str, Any], **kwargs: Any) -> None:
208210 self .set_defaults (kwargs )
209211
210212
211- class _ArgumentGroup (ActionsContainer , argparse ._ArgumentGroup ):
213+ class ArgumentGroup (ActionsContainer , argparse ._ArgumentGroup ):
212214 """Extension of argparse._ArgumentGroup to support additional functionalities."""
213215
214216 dest : Optional [str ] = None
@@ -219,7 +221,8 @@ class ArgumentParser(ParserDeprecations, ActionsContainer, ArgumentLinking, argp
219221 """Parser for command line, configuration files and environment variables."""
220222
221223 formatter_class : Type [DefaultHelpFormatter ]
222- groups : Optional [Dict [str , "_ArgumentGroup" ]] = None
224+ groups : Optional [Dict [str , ArgumentGroup ]] = None
225+ _group_class : Type [ArgumentGroup ]
223226 _subcommands_action : Optional [_ActionSubCommands ] = None
224227 _instantiators : Optional [InstantiatorsDictType ] = None
225228
@@ -258,6 +261,7 @@ def __init__(
258261 default_meta: Set the default value on whether to include metadata in config objects.
259262 """
260263 super ().__init__ (* args , formatter_class = formatter_class , logger = logger , ** kwargs )
264+ self ._group_class = get_argument_group_class (self )
261265 if self .groups is None :
262266 self .groups = {}
263267 self .exit_on_error = exit_on_error
@@ -1183,7 +1187,7 @@ def instantiate_classes(
11831187 Returns:
11841188 A configuration object with all subclasses and class groups instantiated.
11851189 """
1186- components : List [Union [ActionTypeHint , _ActionConfigLoad , _ArgumentGroup ]] = []
1190+ components : List [Union [ActionTypeHint , _ActionConfigLoad , ArgumentGroup ]] = []
11871191 for action in filter_default_actions (self ._actions ):
11881192 if isinstance (action , ActionTypeHint ) or (
11891193 isinstance (action , _ActionConfigLoad ) and is_dataclass_like (action .basetype )
@@ -1439,7 +1443,8 @@ def default_config_files(self, default_config_files: Optional[Sequence[Union[str
14391443 if len (self ._default_config_files ) > 0 :
14401444 if not hasattr (self , "_default_config_files_group" ):
14411445 group_title = "default config file locations"
1442- group = _ArgumentGroup (self , title = group_title )
1446+ group_class = getattr (self , "_group_class" , ArgumentGroup )
1447+ group = group_class (self , title = group_title )
14431448 self ._action_groups = [group ] + self ._action_groups # type: ignore[operator]
14441449 self ._default_config_files_group = group
14451450 elif hasattr (self , "_default_config_files_group" ):
0 commit comments