diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 1632c412..9aa6599c 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -25,6 +25,8 @@ Fixed ^^^^^ - Stubs resolver in some cases failing with maximum recursion error (`#770 `__). +- ``dataclass`` with default failing when ``validate_defaults=True`` (`#771 + `__). v4.41.0 (2025-09-04) diff --git a/jsonargparse/_common.py b/jsonargparse/_common.py index 1ddcb3b5..d140de31 100644 --- a/jsonargparse/_common.py +++ b/jsonargparse/_common.py @@ -171,6 +171,10 @@ def validate_default(container: ActionsContainer, action: argparse.Action): if action.default is None or not get_parsing_setting("validate_defaults") or not hasattr(action, "_check_type"): return try: + from ._core import ArgumentGroup + + if isinstance(container, ArgumentGroup): + container = container.parser # type: ignore[assignment] with parser_context(parent_parser=container): default = action.default action.default = None diff --git a/jsonargparse_tests/test_parsing_settings.py b/jsonargparse_tests/test_parsing_settings.py index e330ee21..0d2d2c6b 100644 --- a/jsonargparse_tests/test_parsing_settings.py +++ b/jsonargparse_tests/test_parsing_settings.py @@ -45,6 +45,18 @@ def test_validate_defaults_failure(parser): parser.add_argument("--num", type=int, default="x") +@dataclass +class DataWithDefault: + param: str = "foo" + + +def test_validate_defaults_dataclass(parser): + set_parsing_settings(validate_defaults=True) + + added_args = parser.add_class_arguments(DataWithDefault) + assert added_args == ["param"] + + # parse_optionals_as_positionals