@@ -65,17 +65,9 @@ def hydrate(cls, message=None, code=None, **metadata):
6565 classification = "DatabaseError"
6666 category = "General"
6767 title = "UnknownError"
68- if classification == "ClientError" :
69- try :
70- error_class = client_errors [code ]
71- except KeyError :
72- error_class = ClientError
73- elif classification == "DatabaseError" :
74- error_class = DatabaseError
75- elif classification == "TransientError" :
76- error_class = TransientError
77- else :
78- error_class = cls
68+
69+ error_class = cls ._extract_error_class (classification , code )
70+
7971 inst = error_class (message )
8072 inst .message = message
8173 inst .code = code
@@ -85,6 +77,26 @@ def hydrate(cls, message=None, code=None, **metadata):
8577 inst .metadata = metadata
8678 return inst
8779
80+ @classmethod
81+ def _extract_error_class (cls , classification , code ):
82+ if classification == "ClientError" :
83+ try :
84+ return client_errors [code ]
85+ except KeyError :
86+ return ClientError
87+
88+ elif classification == "TransientError" :
89+ try :
90+ return transient_errors [code ]
91+ except KeyError :
92+ return TransientError
93+
94+ elif classification == "DatabaseError" :
95+ return DatabaseError
96+
97+ else :
98+ return cls
99+
88100
89101class ClientError (CypherError ):
90102 """ The Client sent a bad request - changing the request might yield a successful outcome.
@@ -101,6 +113,11 @@ class TransientError(CypherError):
101113 """
102114
103115
116+ class DatabaseUnavailableError (TransientError ):
117+ """
118+ """
119+
120+
104121class ConstraintError (ClientError ):
105122 """
106123 """
@@ -116,11 +133,21 @@ class CypherTypeError(ClientError):
116133 """
117134
118135
136+ class NotALeaderError (ClientError ):
137+ """
138+ """
139+
140+
119141class Forbidden (ClientError , SecurityError ):
120142 """
121143 """
122144
123145
146+ class ForbiddenOnReadOnlyDatabaseError (Forbidden ):
147+ """
148+ """
149+
150+
124151class AuthError (ClientError , SecurityError ):
125152 """ Raised when authentication failure occurs.
126153 """
@@ -144,7 +171,7 @@ class AuthError(ClientError, SecurityError):
144171 "Neo.ClientError.Statement.TypeError" : CypherTypeError ,
145172
146173 # Forbidden
147- "Neo.ClientError.General.ForbiddenOnReadOnlyDatabase" : Forbidden ,
174+ "Neo.ClientError.General.ForbiddenOnReadOnlyDatabase" : ForbiddenOnReadOnlyDatabaseError ,
148175 "Neo.ClientError.General.ReadOnly" : Forbidden ,
149176 "Neo.ClientError.Schema.ForbiddenOnConstraintIndex" : Forbidden ,
150177 "Neo.ClientError.Schema.IndexBelongsToConstraint" : Forbidden ,
@@ -155,4 +182,12 @@ class AuthError(ClientError, SecurityError):
155182 "Neo.ClientError.Security.AuthorizationFailed" : AuthError ,
156183 "Neo.ClientError.Security.Unauthorized" : AuthError ,
157184
185+ # NotALeaderError
186+ "Neo.ClientError.Cluster.NotALeader" : NotALeaderError
187+ }
188+
189+ transient_errors = {
190+
191+ # DatabaseUnavailableError
192+ "Neo.TransientError.General.DatabaseUnavailable" : DatabaseUnavailableError
158193}
0 commit comments