Skip to content

Commit

Permalink
Improve error message for rich HTML error pages
Browse files Browse the repository at this point in the history
  • Loading branch information
ml-evs committed Jan 7, 2021
1 parent 790ab7d commit aad6b5f
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 15 deletions.
8 changes: 1 addition & 7 deletions optimade/validator/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -289,13 +289,7 @@ def wrapper(
else:
result, msg = test_fn(validator, *args, **kwargs)

except json.JSONDecodeError as exc:
msg = (
"Critical: unable to parse server response as JSON. "
f"{exc.__class__.__name__}: {exc}"
)
raise exc
except (ResponseError, ValidationError) as exc:
except (json.JSONDecodeError, ResponseError, ValidationError) as exc:
msg = f"{exc.__class__.__name__}: {exc}"
raise exc
except Exception as exc:
Expand Down
9 changes: 6 additions & 3 deletions optimade/validator/validator.py
Original file line number Diff line number Diff line change
Expand Up @@ -1212,9 +1212,12 @@ def _get_endpoint(

if response.status_code not in expected_status_code:
message = f"Request to '{request_str}' returned HTTP code {response.status_code} and not expected {expected_status_code}."
message += "\nError(s):"
for error in response.json().get("errors", []):
message += f'\n {error.get("title", "N/A")}: {error.get("detail", "N/A")} ({error.get("source", {}).get("pointer", "N/A")})'
message += "\nAdditional details:"
try:
for error in response.json().get("errors", []):
message += f'\n {error.get("title", "N/A")}: {error.get("detail", "N/A")} ({error.get("source", {}).get("pointer", "N/A")})'
except json.JSONDecodeError:
message += f"\n Could not parse response as JSON. Content type was {response.headers.get('content-type')!r}."
raise ResponseError(message)

return response, f"received expected response: {response}."
7 changes: 2 additions & 5 deletions tests/validator/test_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -164,17 +164,14 @@ def test_expected_failure_test_case():
assert validator.results.internal_failure_count == 0

assert output[0] is None
assert (
output[1]
== "Critical: unable to parse server response as JSON. JSONDecodeError: Dummy JSON error: line 1 column 1 (char 0)"
)
assert output[1] == "JSONDecodeError: Dummy JSON error: line 1 column 1 (char 0)"
assert (
validator.results.optional_failure_messages[-1][0]
== "http://example.org/test_request - dummy_test_case - failed with error"
)
assert (
validator.results.optional_failure_messages[-1][1]
== "Critical: unable to parse server response as JSON. JSONDecodeError: Dummy JSON error: line 1 column 1 (char 0)"
== "JSONDecodeError: Dummy JSON error: line 1 column 1 (char 0)"
)


Expand Down

0 comments on commit aad6b5f

Please sign in to comment.