Handle the case of maxSize missing in a discovery doc media section.

Reviewed in: http://codereview.appspot.com/4785041/
This commit is contained in:
Joe Gregorio
2011-07-25 10:39:45 -04:00
parent 3c676f940f
commit 84d3c1f562
3 changed files with 25 additions and 1 deletions

View File

@@ -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'] = {}

View File

@@ -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": {

View File

@@ -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)