diff --git a/gcloud/datastore/connection.py b/gcloud/datastore/connection.py index 44403b6c7d30..0810d3303b26 100644 --- a/gcloud/datastore/connection.py +++ b/gcloud/datastore/connection.py @@ -20,6 +20,7 @@ from gcloud.environment_vars import GCD_HOST from gcloud.exceptions import make_exception from gcloud.datastore._generated import datastore_pb2 as _datastore_pb2 +from google.rpc import status_pb2 class Connection(connection.Connection): @@ -89,7 +90,8 @@ def _request(self, project, method, data): status = headers['status'] if status != '200': - raise make_exception(headers, content, use_json=False) + error_status = status_pb2.Status.FromString(content) + raise make_exception(headers, error_status.message, use_json=False) return content diff --git a/gcloud/datastore/test_connection.py b/gcloud/datastore/test_connection.py index d3b220c2dd57..ab8beacc24e9 100644 --- a/gcloud/datastore/test_connection.py +++ b/gcloud/datastore/test_connection.py @@ -153,12 +153,17 @@ def test__request_w_200(self): def test__request_not_200(self): from gcloud.exceptions import BadRequest + from google.rpc import status_pb2 + + error = status_pb2.Status() + error.message = 'Entity value is indexed.' + error.code = 9 # FAILED_PRECONDITION PROJECT = 'PROJECT' METHOD = 'METHOD' DATA = 'DATA' conn = self._makeOne() - conn._http = Http({'status': '400'}, b'Entity value is indexed.') + conn._http = Http({'status': '400'}, error.SerializeToString()) with self.assertRaises(BadRequest) as e: conn._request(PROJECT, METHOD, DATA) expected_message = '400 Entity value is indexed.'