Skip to content

Commit 4d69bb3

Browse files
committed
Merge pull request #767 from dhermes/add-back-762
Using correct format of exceptions from JSON based APIs.
2 parents 622d994 + 344e608 commit 4d69bb3

File tree

3 files changed

+17
-9
lines changed

3 files changed

+17
-9
lines changed

gcloud/exceptions.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -179,11 +179,11 @@ def make_exception(response, content, use_json=True):
179179
if use_json:
180180
payload = json.loads(content)
181181
else:
182-
payload = {'message': content}
182+
payload = {'error': {'message': content}}
183183
else:
184184
payload = content
185185

186-
message = payload.get('message', '')
186+
message = payload.get('error', {}).get('message', '')
187187
errors = payload.get('error', {}).get('errors', ())
188188

189189
try:

gcloud/storage/batch.py

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -167,9 +167,11 @@ def __exit__(self, exc_type, exc_val, exc_tb):
167167
_BATCHES.pop()
168168

169169

170-
def _unpack_batch_response(response, content):
171-
"""Convert response, content -> [(status, reason, payload)]."""
172-
parser = Parser()
170+
def _generate_faux_mime_message(parser, response, content):
171+
"""Convert response, content -> (multipart) email.message.
172+
173+
Helper for _unpack_batch_response.
174+
"""
173175
# We coerce to bytes to get consitent concat across
174176
# Py2 and Py3. Percent formatting is insufficient since
175177
# it includes the b in Py3.
@@ -186,9 +188,15 @@ def _unpack_batch_response(response, content):
186188
])
187189

188190
if six.PY2:
189-
message = parser.parsestr(faux_message)
191+
return parser.parsestr(faux_message)
190192
else: # pragma: NO COVER Python3
191-
message = parser.parsestr(faux_message.decode('utf-8'))
193+
return parser.parsestr(faux_message.decode('utf-8'))
194+
195+
196+
def _unpack_batch_response(response, content):
197+
"""Convert response, content -> [(status, reason, payload)]."""
198+
parser = Parser()
199+
message = _generate_faux_mime_message(parser, response, content)
192200

193201
if not isinstance(message._payload, list):
194202
raise ValueError('Bad response: not multi-part')

gcloud/test_exceptions.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ def _callFUT(self, response, content):
5555
def test_hit_w_content_as_str(self):
5656
from gcloud.exceptions import NotFound
5757
response = _Response(404)
58-
content = b'{"message": "Not Found"}'
58+
content = b'{"error": {"message": "Not Found"}}'
5959
exception = self._callFUT(response, content)
6060
self.assertTrue(isinstance(exception, NotFound))
6161
self.assertEqual(exception.message, 'Not Found')
@@ -71,7 +71,7 @@ def test_miss_w_content_as_dict(self):
7171
'reason': 'test',
7272
}
7373
response = _Response(600)
74-
content = {"message": "Unknown Error", "error": {"errors": [ERROR]}}
74+
content = {"error": {"message": "Unknown Error", "errors": [ERROR]}}
7575
exception = self._callFUT(response, content)
7676
self.assertTrue(isinstance(exception, GCloudError))
7777
self.assertEqual(exception.message, 'Unknown Error')

0 commit comments

Comments
 (0)