Skip to content

Commit

Permalink
Wrap UnexpectedCharacters error as ObservationConfigError
Browse files Browse the repository at this point in the history
Wrap UnexpectedCharacters error in as ObservationConfigError containing the unexpected character, line# and its content
  • Loading branch information
yngve-sk authored and Yngve S. Kristiansen committed Jul 19, 2023
1 parent cc13074 commit 709bc55
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 5 deletions.
29 changes: 25 additions & 4 deletions src/ert/parsing/new_observations_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from enum import Enum, auto
from typing import Any, Dict, List, Literal, Tuple, TypedDict, Union

from lark import Lark, Transformer
from lark import Lark, Transformer, UnexpectedCharacters
from typing_extensions import NotRequired

from .config_errors import ConfigValidationError
Expand Down Expand Up @@ -104,9 +104,30 @@ def _parse_content(
Tuple[ObservationType, FileContextToken, Dict[FileContextToken, Any]],
]
]:
return (FileContextTransformer(filename) * TreeToObservations()).transform(
observations_parser.parse(content)
)
try:
return (FileContextTransformer(filename) * TreeToObservations()).transform(
observations_parser.parse(content)
)
except UnexpectedCharacters as e:
unexpected_char = e.char
allowed_chars = e.allowed
unexpected_line = content.splitlines()[e.line - 1]
message = (
f"Observation parsing failed: Did not expect character: {unexpected_char}"
f" (on line {e.line}: {unexpected_line}). "
f"Expected one of {allowed_chars}."
)

raise ObservationConfigError.from_info(
ErrorInfo(
filename=filename,
message=message,
line=e.line,
end_line=e.line + 1,
column=e.column,
end_column=e.column + 1,
)
)


observations_parser = Lark(
Expand Down
16 changes: 15 additions & 1 deletion tests/test_config_parsing/test_new_observations_parser.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
from ert.parsing.new_observations_parser import ObservationType, _parse_content
import pytest

from ert.parsing.new_observations_parser import (
ObservationConfigError,
ObservationType,
_parse_content,
)


def test_parse():
Expand Down Expand Up @@ -68,3 +74,11 @@ def test_parse():
),
]
)


def test_that_unexpected_character_gives_observation_config_error():
with pytest.raises(
ObservationConfigError,
match=".*i.*line 1.*include a;",
):
_parse_content(content="include a;", filename="")

0 comments on commit 709bc55

Please sign in to comment.