diff --git a/src/ert/parsing/lark_parser.py b/src/ert/parsing/lark_parser.py index aecf87d9dc8..3b696657831 100644 --- a/src/ert/parsing/lark_parser.py +++ b/src/ert/parsing/lark_parser.py @@ -196,16 +196,16 @@ def _tree_to_dict( cwd = os.path.dirname(os.path.abspath(config_file)) for node in tree.children: - try: - args: List[FileContextToken] - kw: FileContextToken - kw, *args = node # type: ignore + args: List[FileContextToken] + kw: FileContextToken + kw, *args = node # type: ignore + if kw not in schema: + warnings.warn(f"Unknown keyword {kw!r}", category=ConfigWarning) + continue - if kw not in schema: - warnings.warn(f"Unknown keyword {kw!r}", category=ConfigWarning) - continue - constraints = schema[kw] + constraints = schema[kw] + try: args = constraints.join_args(args) args = _substitute_args(args, constraints, defines) value_list = constraints.apply_constraints(args, kw, cwd) @@ -227,7 +227,9 @@ def _tree_to_dict( else: config_dict[kw] = value_list except ConfigValidationError as e: - config_dict[kw] = None + if not constraints.multi_occurrence: + config_dict[kw] = None + errors.append(e) try: diff --git a/tests/test_config_parsing/test_ert_config_parsing.py b/tests/test_config_parsing/test_ert_config_parsing.py index 3d6456dbb79..3ff114f8021 100644 --- a/tests/test_config_parsing/test_ert_config_parsing.py +++ b/tests/test_config_parsing/test_ert_config_parsing.py @@ -1136,3 +1136,24 @@ def run(self, *args): ert_config = ErtConfig.from_file("config.ert") assert ert_config is not None + + +@pytest.mark.usefixtures("use_tmpdir") +def test_that_missing_arglist_does_not_affect_subsequent_calls(): + """ + Check that the summary without arglist causes a ConfigValidationError and + not an error from appending to None parsed from SUMMARY w/o arglist + """ + with open("config.ert", mode="w", encoding="utf-8") as fh: + fh.write( + dedent( + """ + NUM_REALIZATIONS 1 + SUMMARY + SUMMARY B 2 + """ + ) + ) + + with pytest.raises(ConfigValidationError, match="must have at least"): + _ = lark_parse("config.ert", schema=init_user_config_schema())