Skip to content

Commit 94a5394

Browse files
Matt CarrollJon Wayne Parrott
authored andcommitted
Fix error in resumable upload when receiving a 308 response (#312)
1 parent 5dcd66c commit 94a5394

File tree

2 files changed

+18
-6
lines changed

2 files changed

+18
-6
lines changed

googleapiclient/http.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -996,7 +996,11 @@ def _process_response(self, resp, content):
996996
elif resp.status == 308:
997997
self._in_error_state = False
998998
# A "308 Resume Incomplete" indicates we are not done.
999-
self.resumable_progress = int(resp['range'].split('-')[1]) + 1
999+
try:
1000+
self.resumable_progress = int(resp['range'].split('-')[1]) + 1
1001+
except KeyError:
1002+
# If resp doesn't contain range header, resumable progress is 0
1003+
self.resumable_progress = 0
10001004
if 'location' in resp:
10011005
self.resumable_uri = resp['location']
10021006
else:

tests/test_discovery.py

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -868,28 +868,36 @@ def test_resumable_multipart_media_good_upload(self):
868868
({'status': '200',
869869
'location': 'http://upload.example.com'}, ''),
870870
({'status': '308',
871-
'location': 'http://upload.example.com/2',
872-
'range': '0-12'}, ''),
871+
'location': 'http://upload.example.com/2'}, ''),
873872
({'status': '308',
874873
'location': 'http://upload.example.com/3',
874+
'range': '0-12'}, ''),
875+
({'status': '308',
876+
'location': 'http://upload.example.com/4',
875877
'range': '0-%d' % (media_upload.size() - 2)}, ''),
876878
({'status': '200'}, '{"foo": "bar"}'),
877879
])
878880

879881
status, body = request.next_chunk(http=http)
880882
self.assertEquals(None, body)
881883
self.assertTrue(isinstance(status, MediaUploadProgress))
882-
self.assertEquals(13, status.resumable_progress)
884+
self.assertEquals(0, status.resumable_progress)
883885

884886
# Two requests should have been made and the resumable_uri should have been
885887
# updated for each one.
886888
self.assertEquals(request.resumable_uri, 'http://upload.example.com/2')
887-
889+
self.assertEquals(media_upload, request.resumable)
890+
self.assertEquals(0, request.resumable_progress)
891+
892+
# This next chuck call should upload the first chunk
893+
status, body = request.next_chunk(http=http)
894+
self.assertEquals(request.resumable_uri, 'http://upload.example.com/3')
888895
self.assertEquals(media_upload, request.resumable)
889896
self.assertEquals(13, request.resumable_progress)
890897

898+
# This call will upload the next chunk
891899
status, body = request.next_chunk(http=http)
892-
self.assertEquals(request.resumable_uri, 'http://upload.example.com/3')
900+
self.assertEquals(request.resumable_uri, 'http://upload.example.com/4')
893901
self.assertEquals(media_upload.size()-1, request.resumable_progress)
894902
self.assertEquals('{"data": {}}', request.body)
895903

0 commit comments

Comments
 (0)