Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions neo4j/exceptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -247,15 +247,17 @@ def is_fatal_during_discovery(self) -> bool:
return False

def __str__(self):
return "{{code: {code}}} {{message: {message}}}".format(code=self.code, message=self.message)
if self.code and self.message:
return "{{code: {code}}} {{message: {message}}}".format(
code=self.code, message=self.message
)
return super().__str__()


# Neo4jError > ClientError
class ClientError(Neo4jError):
""" The Client sent a bad request - changing the request might yield a successful outcome.
"""
def __str__(self) -> str:
return super().__str__()


# Neo4jError > ClientError > CypherSyntaxError
Expand Down
17 changes: 17 additions & 0 deletions tests/unit/common/test_exceptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -257,3 +257,20 @@ def test_error_rewrite(code, expected_cls, expected_code):
assert error.is_retryable() is expected_retryable
with pytest.warns(DeprecationWarning, match=".*is_retryable.*"):
assert error.is_retriable() is expected_retryable


def test_neo4j_error_from_server_as_str():
error = Neo4jError.hydrate(message="Test error message",
code="Neo.ClientError.General.UnknownError")

assert isinstance(error, ClientError)
assert str(error) == ("{code: Neo.ClientError.General.UnknownError} "
"{message: Test error message}")


@pytest.mark.parametrize("cls", (Neo4jError, ClientError))
def test_neo4j_error_from_code_as_str(cls):
error = cls("Generated somewhere in the driver")

assert isinstance(error, cls)
assert str(error) == "Generated somewhere in the driver"