diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 853f2b21..967aba73 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -12,6 +12,15 @@ The semantic versioning only considers the public API as described in paths are considered internals and can change in minor and patch releases. +v4.37.1 (2025-02-??) +-------------------- + +Fixed +^^^^^ +- ``add_class_arguments`` with dashes in the ``nested_key`` fail to instantiate + (`#679 `__). + + v4.37.0 (2025-02-14) -------------------- diff --git a/jsonargparse/_signatures.py b/jsonargparse/_signatures.py index 48d27e72..382073d4 100644 --- a/jsonargparse/_signatures.py +++ b/jsonargparse/_signatures.py @@ -546,7 +546,7 @@ def _create_group_if_requested( if config_load and nested_key is not None: group.add_argument("--" + nested_key, action=_ActionConfigLoad(basetype=config_load_type)) if inspect.isclass(obj) and nested_key is not None and instantiate: - group.dest = nested_key + group.dest = nested_key.replace("-", "_") group.group_class = obj group.instantiate_class = group_instantiate_class return group diff --git a/jsonargparse_tests/test_signatures.py b/jsonargparse_tests/test_signatures.py index aa39a8d6..6645a21a 100644 --- a/jsonargparse_tests/test_signatures.py +++ b/jsonargparse_tests/test_signatures.py @@ -243,7 +243,18 @@ def test_add_class_implemented_with_new(parser): class RequiredParams: def __init__(self, n: int, m: float): - pass + self.n = n + self.m = m + + +def test_add_class_group_name_dash_required_parameters(parser): + parser.add_class_arguments(RequiredParams, "required-params") + assert "required-params" in parser.groups + cfg = parser.parse_args(["--required-params.n=6", "--required-params.m=0.9"]) + init = parser.instantiate_classes(cfg) + assert isinstance(init.required_params, RequiredParams) + assert init.required_params.n == 6 + assert init.required_params.m == 0.9 def test_add_class_with_required_parameters(parser):