diff --git a/apiclient/discovery.py b/apiclient/discovery.py index 82629ee..02ab99e 100644 --- a/apiclient/discovery.py +++ b/apiclient/discovery.py @@ -424,10 +424,19 @@ def createResource(http, baseUrl, model, requestBuilder, for name, enums in enum_params.iteritems(): if name in kwargs: - if kwargs[name] not in enums: - raise TypeError( - 'Parameter "%s" value "%s" is not an allowed value in "%s"' % - (name, kwargs[name], str(enums))) + # We need to handle the case of a repeated enum + # name differently, since we want to handle both + # arg='value' and arg=['value1', 'value2'] + if (name in repeated_params and + not isinstance(kwargs[name], basestring)): + values = kwargs[name] + else: + values = [kwargs[name]] + for value in values: + if value not in enums: + raise TypeError( + 'Parameter "%s" value "%s" is not an allowed value in "%s"' % + (name, value, str(enums))) actual_query_params = {} actual_path_params = {} diff --git a/tests/data/zoo.json b/tests/data/zoo.json index 9ead92a..7ef0f24 100644 --- a/tests/data/zoo.json +++ b/tests/data/zoo.json @@ -178,6 +178,17 @@ "bar" ] }, + "er": { + "type": "string", + "location": "query", + "required": false, + "repeated": true, + "enum": [ + "one", + "two", + "three" + ] + }, "rr": { "type": "string", "location": "query", diff --git a/tests/test_discovery.py b/tests/test_discovery.py index f15ec62..36d9c8a 100644 --- a/tests/test_discovery.py +++ b/tests/test_discovery.py @@ -170,13 +170,18 @@ class Discovery(unittest.TestCase): self._check_query_types(request) request = zoo.query( - q="foo", i="1", n="1", b="", a=[1,2,3], o={'a':1}, e='bar') + q="foo", i="1", n="1", b="", a=[1,2,3], o={'a':1}, e='bar', er='two') request = zoo.query( - q="foo", i="1", n="1", b="", a=[1,2,3], o={'a':1}, e='bar', rr=['foo', - 'bar']) + q="foo", i="1", n="1", b="", a=[1,2,3], o={'a':1}, e='bar', + er=['one', 'three'], rr=['foo', 'bar']) self._check_query_types(request) + # Five is right out. + self.assertRaisesRegexp( + TypeError, '"five" is not an allowed value in', + zoo.query, er=['one', 'five']) + def test_optional_stack_query_parameters(self): http = HttpMock(datafile('zoo.json'), {'status': '200'}) zoo = build('zoo', 'v1', http)