|
9 | 9 | import sys |
10 | 10 | from copy import deepcopy |
11 | 11 | from typing import Any, Callable, Dict, List, NoReturn, Optional, Sequence, Set, Tuple, Type, Union |
12 | | -from unittest.mock import patch |
13 | 12 |
|
14 | 13 | from .formatters import DefaultHelpFormatter, empty_help, formatter_context, get_env_var |
15 | 14 | from .jsonnet import ActionJsonnet |
16 | 15 | from .jsonschema import ActionJsonSchema |
17 | 16 | from .link_arguments import ActionLink, ArgumentLinking |
18 | 17 | from .loaders_dumpers import check_valid_dump_format, dump_using_format, get_loader_exceptions, loaders, load_value, load_value_context, yaml_load |
19 | | -from .namespace import dict_to_namespace, is_meta_key, Namespace, split_key, split_key_leaf, strip_meta |
| 18 | +from .namespace import dict_to_namespace, is_meta_key, Namespace, patch_namespace, split_key, split_key_leaf, strip_meta |
20 | 19 | from .signatures import is_pure_dataclass, SignatureArguments |
21 | 20 | from .typehints import ActionTypeHint, is_subclass_spec |
22 | 21 | from .typing import is_final_class |
@@ -233,7 +232,7 @@ def parse_known_args(self, args=None, namespace=None): |
233 | 232 | namespace = argcomplete_namespace(caller, self, namespace) |
234 | 233 |
|
235 | 234 | try: |
236 | | - with patch('argparse.Namespace', Namespace), lenient_check_context(caller), ActionTypeHint.subclass_arg_context(self), load_value_context(self.parser_mode): |
| 235 | + with patch_namespace(), lenient_check_context(caller), ActionTypeHint.subclass_arg_context(self), load_value_context(self.parser_mode): |
237 | 236 | namespace, args = self._parse_known_args(args, namespace) |
238 | 237 | except (argparse.ArgumentError, ParserError) as ex: |
239 | 238 | self.error(str(ex), ex) |
@@ -1409,6 +1408,10 @@ def parser_mode(self) -> str: |
1409 | 1408 |
|
1410 | 1409 | @parser_mode.setter |
1411 | 1410 | def parser_mode(self, parser_mode: str): |
| 1411 | + if parser_mode not in loaders and parser_mode == 'omegaconf' and omegaconf_support: |
| 1412 | + from .loaders_dumpers import set_loader |
| 1413 | + from .optionals import get_omegaconf_loader |
| 1414 | + set_loader('omegaconf', get_omegaconf_loader()) |
1412 | 1415 | if parser_mode not in loaders: |
1413 | 1416 | raise ValueError(f'The only accepted values for parser_mode are {set(loaders.keys())}.') |
1414 | 1417 | if parser_mode == 'jsonnet': |
@@ -1439,12 +1442,6 @@ def dump_header(self, dump_header: Optional[List[str]]): |
1439 | 1442 | self._dump_header = dump_header |
1440 | 1443 |
|
1441 | 1444 |
|
1442 | | -if omegaconf_support: |
1443 | | - from .loaders_dumpers import set_loader |
1444 | | - from .optionals import get_omegaconf_loader |
1445 | | - set_loader('omegaconf', get_omegaconf_loader()) |
1446 | | - |
1447 | | - |
1448 | 1445 | from .deprecated import parse_as_dict_patch, instantiate_subclasses_patch |
1449 | 1446 | instantiate_subclasses_patch() |
1450 | 1447 | if 'JSONARGPARSE_SKIP_DEPRECATION_PATCH' not in os.environ: |
|
0 commit comments