From 740a917c424bb5e0e4bbf488f4682dec33410f98 Mon Sep 17 00:00:00 2001 From: Tomasz Dwojak Date: Fri, 11 Jul 2025 15:19:34 +0200 Subject: [PATCH 1/4] Fix Parser with dashes --- jsonargparse/_core.py | 3 ++- jsonargparse_tests/test_dataclass_like.py | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/jsonargparse/_core.py b/jsonargparse/_core.py index 0dcc3b29..2c92ef16 100644 --- a/jsonargparse/_core.py +++ b/jsonargparse/_core.py @@ -201,6 +201,7 @@ def set_defaults(self, *args: Dict[str, Any], **kwargs: Any) -> None: """ for arg in args: for dest, default in arg.items(): + dest = dest.replace("-", "_") action = _find_action(self, dest) if action is None: raise NSKeyError(f'No action for key "{dest}" to set its default.') @@ -458,7 +459,7 @@ def parse_args( # type: ignore[override] cfg, unk = self.parse_known_args(args=args, namespace=cfg) cfg, unk = self._positional_optionals(cfg, unk) if unk: - self.error(f'Unrecognized arguments: {" ".join(unk)}') + self.error(f"Unrecognized arguments: {' '.join(unk)}") parsed_cfg = self._parse_common( cfg=cfg, diff --git a/jsonargparse_tests/test_dataclass_like.py b/jsonargparse_tests/test_dataclass_like.py index e8fdf548..c97108c1 100644 --- a/jsonargparse_tests/test_dataclass_like.py +++ b/jsonargparse_tests/test_dataclass_like.py @@ -115,6 +115,14 @@ class NestedDefaultsA: class NestedDefaultsB: a: List[NestedDefaultsA] +@dataclasses.dataclass +class NestedDefaultsC: + field_with_dash: int = 5 + +@dataclasses.dataclass +class NestedDefaultsD: + c_with_dash: NestedDefaultsC = dataclasses.field(default_factory=NestedDefaultsC) + def test_add_dataclass_nested_defaults(parser): parser.add_class_arguments(NestedDefaultsB, "data") @@ -989,6 +997,18 @@ def test_nested_dict(self, parser): assert isinstance(init.model, PydanticNestedDict) assert isinstance(init.model.nested["key"], NestedModel) + def test_dashes_in_nested_dataclass(self): + class UnderscoresToDashesParser(ArgumentParser): + def add_argument(self, *args, **kwargs): + args = [arg.replace("_", "-") for arg in args] + return super().add_argument(*args, **kwargs) + + parser = UnderscoresToDashesParser(parse_as_dict=False, default_env=True) + parser.add_class_arguments(NestedDefaultsD) + ns = parser.parse_args([]) + cfg = parser.instantiate_classes(ns) + assert cfg.c_with_dash.field_with_dash == 5 + # attrs tests From 5617a98dc8234f62cd26bf582ac4e20976cdf049 Mon Sep 17 00:00:00 2001 From: Tomasz Dwojak Date: Fri, 11 Jul 2025 15:26:07 +0200 Subject: [PATCH 2/4] Fix Parser with dashes(black) --- jsonargparse_tests/test_dataclass_like.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/jsonargparse_tests/test_dataclass_like.py b/jsonargparse_tests/test_dataclass_like.py index c97108c1..6ee90059 100644 --- a/jsonargparse_tests/test_dataclass_like.py +++ b/jsonargparse_tests/test_dataclass_like.py @@ -115,10 +115,12 @@ class NestedDefaultsA: class NestedDefaultsB: a: List[NestedDefaultsA] + @dataclasses.dataclass class NestedDefaultsC: field_with_dash: int = 5 + @dataclasses.dataclass class NestedDefaultsD: c_with_dash: NestedDefaultsC = dataclasses.field(default_factory=NestedDefaultsC) From b320ae03dace30dacff40d297fe806019c9aae60 Mon Sep 17 00:00:00 2001 From: Tomasz Dwojak Date: Mon, 14 Jul 2025 08:26:47 +0200 Subject: [PATCH 3/4] Update changelog --- CHANGELOG.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 1fc5056b..f7bedb6a 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -21,6 +21,7 @@ Fixed - ``adapt_class_type`` used a locally defined `partial_instance` wrapper function that is not pickleable (`#728 `__). +- ArgumentParser with dashes incorrectly resolves paths to default values() v4.40.0 (2025-05-16) From 0c71303389c692b9fc1154039b8e72ca7795da35 Mon Sep 17 00:00:00 2001 From: Tomasz Dwojak <119527196+sfc-gh-tdwojak@users.noreply.github.com> Date: Tue, 15 Jul 2025 11:04:11 +0200 Subject: [PATCH 4/4] Update CHANGELOG.rst Co-authored-by: Mauricio Villegas <5780272+mauvilsa@users.noreply.github.com> --- CHANGELOG.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index f7bedb6a..279ca941 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -21,7 +21,8 @@ Fixed - ``adapt_class_type`` used a locally defined `partial_instance` wrapper function that is not pickleable (`#728 `__). -- ArgumentParser with dashes incorrectly resolves paths to default values() +- ArgumentParser with dashes incorrectly resolves paths to default values (`#736 + `__). v4.40.0 (2025-05-16)