From 4d544376cdaf666059d19872c2827d9734a2f54c Mon Sep 17 00:00:00 2001 From: Rouven Bauer Date: Thu, 25 Mar 2021 12:31:15 +0100 Subject: [PATCH 1/2] Surface DatabaseNotFound on routing message to user --- neo4j/io/_bolt4.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/neo4j/io/_bolt4.py b/neo4j/io/_bolt4.py index 4968332c3..2d6c74064 100644 --- a/neo4j/io/_bolt4.py +++ b/neo4j/io/_bolt4.py @@ -164,7 +164,10 @@ def route(self, database): def fail(md): from neo4j._exceptions import BoltRoutingError - if md.get("code") == "Neo.ClientError.Procedure.ProcedureNotFound": + code = md.get("code") + if code == "Neo.ClientError.Database.DatabaseNotFound": + return # surface this error to the user + elif code == "Neo.ClientError.Procedure.ProcedureNotFound": raise BoltRoutingError("Server does not support routing", self.unresolved_address) else: raise BoltRoutingError("Routing support broken on server", self.unresolved_address) @@ -512,7 +515,10 @@ def route(self, database): def fail(md): from neo4j._exceptions import BoltRoutingError - if md.get("code") == "Neo.ClientError.Procedure.ProcedureNotFound": + code = md.get("code") + if code == "Neo.ClientError.Database.DatabaseNotFound": + return # surface this error to the user + elif code == "Neo.ClientError.Procedure.ProcedureNotFound": raise BoltRoutingError("Server does not support routing", self.unresolved_address) else: raise BoltRoutingError("Routing support broken on server", self.unresolved_address) From 920184909379c128584e5f5f671dd33b2e7fd036 Mon Sep 17 00:00:00 2001 From: Rouven Bauer Date: Fri, 26 Mar 2021 13:27:44 +0100 Subject: [PATCH 2/2] Adjust test to reflect surfacing DatabaseNotFound error --- tests/integration/test_neo4j_driver.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/integration/test_neo4j_driver.py b/tests/integration/test_neo4j_driver.py index 7de0b471b..4be1a2e15 100644 --- a/tests/integration/test_neo4j_driver.py +++ b/tests/integration/test_neo4j_driver.py @@ -81,7 +81,8 @@ def test_test_multi_db_specify_database(neo4j_uri, auth, target): assert "Database name parameter for selecting database is not supported in Bolt Protocol Version(3, 0)." in error.args[0] except ClientError as error: # FAILURE {'code': 'Neo.ClientError.Database.DatabaseNotFound' - This message is sent from the server - assert error.args[0] == "Unable to get a routing table for database 'test_database' because this database does not exist" + assert error.code == "Neo.ClientError.Database.DatabaseNotFound" + assert "test_database" in error.message def test_neo4j_multi_database_support_create(neo4j_uri, auth, target, requires_bolt_4x):