Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
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
6 changes: 5 additions & 1 deletion datastore/google/cloud/datastore/connection.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
from google.cloud import connection as connection_module
from google.cloud.environment_vars import DISABLE_GRPC
from google.cloud.environment_vars import GCD_HOST
from google.cloud.exceptions import BadRequest
from google.cloud.exceptions import Conflict
from google.cloud.exceptions import GrpcRendezvous
from google.cloud.exceptions import make_exception
Expand Down Expand Up @@ -313,8 +314,11 @@ def commit(self, project, request_pb):
try:
return self._stub.Commit(request_pb)
except GrpcRendezvous as exc:
if exc.code() == StatusCode.ABORTED:
error_code = exc.code()
if error_code == StatusCode.ABORTED:
raise Conflict(exc.details())
if error_code == StatusCode.INVALID_ARGUMENT:
raise BadRequest(exc.details())
raise

def rollback(self, project, request_pb):
Expand Down
13 changes: 13 additions & 0 deletions datastore/unit_tests/test_connection.py
Original file line number Diff line number Diff line change
Expand Up @@ -252,6 +252,19 @@ def test_commit_failure_aborted(self):
exc = GrpcRendezvous(exc_state, None, None, None)
self._commit_failure_helper(exc, Conflict)

@unittest.skipUnless(_HAVE_GRPC, 'No gRPC')
def test_commit_failure_invalid_argument(self):
from grpc import StatusCode
from grpc._channel import _RPCState
from google.cloud.exceptions import BadRequest
from google.cloud.exceptions import GrpcRendezvous

details = 'Too long content.'
exc_state = _RPCState((), None, None,
StatusCode.INVALID_ARGUMENT, details)
exc = GrpcRendezvous(exc_state, None, None, None)
self._commit_failure_helper(exc, BadRequest)

@unittest.skipUnless(_HAVE_GRPC, 'No gRPC')
def test_commit_failure_cancelled(self):
from grpc import StatusCode
Expand Down