Skip to content

Commit 4a97272

Browse files
committed
Addressing content-type and renaming Batch._futures.
NOTE: This commit made for review but will be folded into originals before merged.
1 parent f48620f commit 4a97272

File tree

4 files changed

+22
-21
lines changed

4 files changed

+22
-21
lines changed

gcloud/connection.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -309,13 +309,13 @@ def api_request(self, method, path, query_params=None,
309309
if not 200 <= response.status < 300:
310310
raise make_exception(response, content)
311311

312-
if isinstance(content, six.binary_type):
313-
content = content.decode('utf-8')
314-
315-
if expect_json and content and isinstance(content, six.string_types):
312+
string_or_bytes = (six.binary_type, six.text_type)
313+
if content and expect_json and isinstance(content, string_or_bytes):
316314
content_type = response.get('content-type', '')
317315
if not content_type.startswith('application/json'):
318316
raise TypeError('Expected JSON, got %s' % content_type)
317+
if isinstance(content, six.binary_type):
318+
content = content.decode('utf-8')
319319
return json.loads(content)
320320

321321
return content

gcloud/storage/batch.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ def __init__(self, connection=None):
136136
super(Batch, self).__init__()
137137
self._connection = connection
138138
self._requests = []
139-
self._futures = []
139+
self._target_objects = []
140140

141141
def _do_request(self, method, url, headers, data, target_object):
142142
"""Override Connection: defer actual HTTP request.
@@ -164,7 +164,7 @@ def _do_request(self, method, url, headers, data, target_object):
164164
self._MAX_BATCH_SIZE)
165165
self._requests.append((method, url, headers, data))
166166
result = _FutureDict()
167-
self._futures.append(target_object)
167+
self._target_objects.append(target_object)
168168
if target_object is not None:
169169
target_object._properties = result
170170
return NoContent(), result
@@ -211,15 +211,16 @@ def _finish_futures(self, responses):
211211
# until all futures have been populated.
212212
exception_args = None
213213

214-
if len(self._futures) != len(responses):
214+
if len(self._target_objects) != len(responses):
215215
raise ValueError('Expected a response for every request.')
216216

217-
for target_object, sub_response in zip(self._futures, responses):
217+
for target_object, sub_response in zip(self._target_objects,
218+
responses):
218219
resp_headers, sub_payload = sub_response
219220
if not 200 <= resp_headers.status < 300:
220221
exception_args = exception_args or (resp_headers,
221222
sub_payload)
222-
if target_object is not None:
223+
elif target_object is not None:
223224
target_object._properties = sub_payload
224225

225226
if exception_args is not None:

gcloud/storage/test_batch.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ def test_ctor_w_explicit_connection(self):
8989
batch = self._makeOne(connection)
9090
self.assertTrue(batch._connection is connection)
9191
self.assertEqual(len(batch._requests), 0)
92-
self.assertEqual(len(batch._futures), 0)
92+
self.assertEqual(len(batch._target_objects), 0)
9393

9494
def test_ctor_w_implicit_connection(self):
9595
from gcloud.storage._testing import _monkey_defaults
@@ -101,7 +101,7 @@ def test_ctor_w_implicit_connection(self):
101101

102102
self.assertTrue(batch._connection is connection)
103103
self.assertEqual(len(batch._requests), 0)
104-
self.assertEqual(len(batch._futures), 0)
104+
self.assertEqual(len(batch._target_objects), 0)
105105

106106
def test__make_request_GET_normal(self):
107107
from gcloud.storage.batch import _FutureDict
@@ -115,7 +115,7 @@ def test__make_request_GET_normal(self):
115115
target_object=target)
116116
self.assertEqual(response.status, 204)
117117
self.assertTrue(isinstance(content, _FutureDict))
118-
self.assertEqual(target._properties, content)
118+
self.assertTrue(target._properties is content)
119119
self.assertEqual(http._requests, [])
120120
EXPECTED_HEADERS = [
121121
('Accept-Encoding', 'gzip'),
@@ -140,7 +140,7 @@ def test__make_request_POST_normal(self):
140140
target_object=target)
141141
self.assertEqual(response.status, 204)
142142
self.assertTrue(isinstance(content, _FutureDict))
143-
self.assertEqual(target._properties, content)
143+
self.assertTrue(target._properties is content)
144144
self.assertEqual(http._requests, [])
145145
EXPECTED_HEADERS = [
146146
('Accept-Encoding', 'gzip'),
@@ -165,7 +165,7 @@ def test__make_request_PATCH_normal(self):
165165
target_object=target)
166166
self.assertEqual(response.status, 204)
167167
self.assertTrue(isinstance(content, _FutureDict))
168-
self.assertEqual(target._properties, content)
168+
self.assertTrue(target._properties is content)
169169
self.assertEqual(http._requests, [])
170170
EXPECTED_HEADERS = [
171171
('Accept-Encoding', 'gzip'),
@@ -190,7 +190,7 @@ def test__make_request_DELETE_normal(self):
190190
target_object=target)
191191
self.assertEqual(response.status, 204)
192192
self.assertTrue(isinstance(content, _FutureDict))
193-
self.assertEqual(target._properties, content)
193+
self.assertTrue(target._properties is content)
194194
self.assertEqual(http._requests, [])
195195
EXPECTED_HEADERS = [
196196
('Accept-Encoding', 'gzip'),
@@ -330,13 +330,13 @@ def test_finish_nonempty_with_status_failure(self):
330330
batch._do_request('GET', URL, {}, None, target1)
331331
batch._do_request('GET', URL, {}, None, target2)
332332
# Make sure futures are not populated.
333-
self.assertEqual([future for future in batch._futures],
333+
self.assertEqual([future for future in batch._target_objects],
334334
[target1, target2])
335+
target2_future_before = target2._properties
335336
self.assertRaises(NotFound, batch.finish)
336337
self.assertEqual(target1._properties,
337338
{'foo': 1, 'bar': 2})
338-
self.assertEqual(target2._properties,
339-
{u'error': {u'message': u'Not Found'}})
339+
self.assertTrue(target2._properties is target2_future_before)
340340

341341
self.assertEqual(len(http._requests), 1)
342342
method, uri, headers, body = http._requests[0]
@@ -395,7 +395,7 @@ def test_as_context_mgr_wo_error(self):
395395
self.assertEqual(batch._requests[0][0], 'POST')
396396
self.assertEqual(batch._requests[1][0], 'PATCH')
397397
self.assertEqual(batch._requests[2][0], 'DELETE')
398-
self.assertEqual(batch._futures, [target1, target2, target3])
398+
self.assertEqual(batch._target_objects, [target1, target2, target3])
399399
self.assertEqual(target1._properties,
400400
{'foo': 1, 'bar': 2})
401401
self.assertEqual(target2._properties,
@@ -429,7 +429,7 @@ def test_as_context_mgr_w_error(self):
429429
self.assertEqual(list(_BATCHES), [])
430430
self.assertEqual(len(http._requests), 0)
431431
self.assertEqual(len(batch._requests), 3)
432-
self.assertEqual(batch._futures, [target1, target2, target3])
432+
self.assertEqual(batch._target_objects, [target1, target2, target3])
433433
# Since the context manager fails, finish will not get called and
434434
# the _properties will still be futures.
435435
self.assertTrue(isinstance(target1._properties, _FutureDict))

gcloud/test_connection.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ def test_api_request_wo_json_expected(self):
255255
b'CONTENT',
256256
)
257257
self.assertEqual(conn.api_request('GET', '/', expect_json=False),
258-
u'CONTENT')
258+
b'CONTENT')
259259

260260
def test_api_request_w_query_params(self):
261261
from six.moves.urllib.parse import parse_qsl

0 commit comments

Comments
 (0)