diff --git a/apiclient/discovery.py b/apiclient/discovery.py index 8e14889..81242b8 100644 --- a/apiclient/discovery.py +++ b/apiclient/discovery.py @@ -250,6 +250,8 @@ MULTIPLIERS = { def _media_size_to_long(maxSize): """Convert a string media size, such as 10GB or 3TB into an integer.""" + if len(maxSize) < 2: + return 0 units = maxSize[-2:].upper() multiplier = MULTIPLIERS.get(units, 0) if multiplier: @@ -284,7 +286,7 @@ def createResource(http, baseUrl, model, requestBuilder, mediaUpload = methodDesc['mediaUpload'] mediaPathUrl = mediaUpload['protocols']['simple']['path'] accept = mediaUpload['accept'] - maxSize = _media_size_to_long(mediaUpload['maxSize']) + maxSize = _media_size_to_long(mediaUpload.get('maxSize', '')) if 'parameters' not in methodDesc: methodDesc['parameters'] = {} diff --git a/tests/data/zoo.json b/tests/data/zoo.json index 1475704..d4ae969 100644 --- a/tests/data/zoo.json +++ b/tests/data/zoo.json @@ -218,6 +218,21 @@ "description": "Cross-breed animals", "response": { "$ref": "Animal2" + }, + "mediaUpload": { + "accept": [ + "image/png" + ], + "protocols": { + "simple": { + "multipart": true, + "path": "upload/activities/{userId}/@self" + }, + "resumable": { + "multipart": true, + "path": "upload/activities/{userId}/@self" + } + } } }, "delete": { diff --git a/tests/test_discovery.py b/tests/test_discovery.py index ff5f88d..a6b7c9c 100644 --- a/tests/test_discovery.py +++ b/tests/test_discovery.py @@ -211,6 +211,13 @@ class Discovery(unittest.TestCase): doc = getattr(zoo.animals().insert, '__doc__') self.assertTrue('media_body' in doc) + def test_simple_media_upload_no_max_size_provided(self): + self.http = HttpMock(datafile('zoo.json'), {'status': '200'}) + zoo = build('zoo', 'v1', self.http) + request = zoo.animals().crossbreed(media_body=datafile('small.png')) + self.assertEquals('image/png', request.headers['content-type']) + self.assertEquals('PNG', request.body[1:4]) + def test_simple_media_raise_correct_exceptions(self): self.http = HttpMock(datafile('zoo.json'), {'status': '200'}) zoo = build('zoo', 'v1', self.http)