Skip to content

Commit 79a5a78

Browse files
authored
Merge pull request #2423 from dhermes/fix-2422
Translating INVALID_ARGUMENT on datastore commit to standard exception.
2 parents 5e3a35e + abd508e commit 79a5a78

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

datastore/google/cloud/datastore/connection.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
from google.cloud import connection as connection_module
2424
from google.cloud.environment_vars import DISABLE_GRPC
2525
from google.cloud.environment_vars import GCD_HOST
26+
from google.cloud.exceptions import BadRequest
2627
from google.cloud.exceptions import Conflict
2728
from google.cloud.exceptions import GrpcRendezvous
2829
from google.cloud.exceptions import make_exception
@@ -313,8 +314,11 @@ def commit(self, project, request_pb):
313314
try:
314315
return self._stub.Commit(request_pb)
315316
except GrpcRendezvous as exc:
316-
if exc.code() == StatusCode.ABORTED:
317+
error_code = exc.code()
318+
if error_code == StatusCode.ABORTED:
317319
raise Conflict(exc.details())
320+
if error_code == StatusCode.INVALID_ARGUMENT:
321+
raise BadRequest(exc.details())
318322
raise
319323

320324
def rollback(self, project, request_pb):

datastore/unit_tests/test_connection.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,19 @@ def test_commit_failure_aborted(self):
252252
exc = GrpcRendezvous(exc_state, None, None, None)
253253
self._commit_failure_helper(exc, Conflict)
254254

255+
@unittest.skipUnless(_HAVE_GRPC, 'No gRPC')
256+
def test_commit_failure_invalid_argument(self):
257+
from grpc import StatusCode
258+
from grpc._channel import _RPCState
259+
from google.cloud.exceptions import BadRequest
260+
from google.cloud.exceptions import GrpcRendezvous
261+
262+
details = 'Too long content.'
263+
exc_state = _RPCState((), None, None,
264+
StatusCode.INVALID_ARGUMENT, details)
265+
exc = GrpcRendezvous(exc_state, None, None, None)
266+
self._commit_failure_helper(exc, BadRequest)
267+
255268
@unittest.skipUnless(_HAVE_GRPC, 'No gRPC')
256269
def test_commit_failure_cancelled(self):
257270
from grpc import StatusCode

0 commit comments

Comments
 (0)