Skip to content

Commit d4e3c21

Browse files
authored
Merge pull request #2 from Abstract-Data/copilot/fix-index-error-validation
2 parents d123e1f + 44b6a83 commit d4e3c21

2 files changed

Lines changed: 19 additions & 1 deletion

File tree

src/abstract_validation_base/runner.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,8 @@ def error_summary(self) -> list[tuple[str, str]]:
7777
"""
7878
errors: list[tuple[str, str]] = []
7979
for pydantic_err in self.pydantic_errors:
80-
field_name = str(pydantic_err.get("loc", ["unknown"])[-1])
80+
loc = pydantic_err.get("loc", ())
81+
field_name = str(loc[-1]) if loc else "unknown"
8182
msg = pydantic_err.get("msg", pydantic_err.get("type", "validation_error"))
8283
errors.append((field_name, msg))
8384
if self.validator_result:

tests/test_runner.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,23 @@ def test_error_summary_uses_type_when_msg_missing(self) -> None:
108108
errors = result.error_summary
109109
assert errors[0][1] == "value_error"
110110

111+
def test_error_summary_handles_empty_loc_tuple(self) -> None:
112+
"""Test error_summary handles Pydantic errors with empty loc tuple.
113+
114+
This can occur with model_validator failures on nested models where
115+
Pydantic may return an empty location tuple.
116+
"""
117+
result: RowResult[SampleModel] = RowResult(
118+
row_index=0,
119+
raw_data={},
120+
pydantic_errors=[{"type": "value_error", "loc": (), "msg": "Model validation failed"}],
121+
)
122+
123+
errors = result.error_summary
124+
assert len(errors) == 1
125+
assert errors[0][0] == "unknown" # Default when loc is empty
126+
assert errors[0][1] == "Model validation failed"
127+
111128

112129
# =============================================================================
113130
# RunnerStats Unit Tests

0 commit comments

Comments
 (0)