Handle the case of maxSize missing in a discovery doc media section.
Reviewed in: http://codereview.appspot.com/4785041/
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 @@
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 @@
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 @@
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)