From f71b4f61d96c43748ca1cb9002f874a8d8276312 Mon Sep 17 00:00:00 2001 From: Stephen Pascoe Date: Wed, 4 Oct 2017 01:01:47 +0100 Subject: [PATCH] Fix arguments with type=list (#705) Closes #681 --- flask_restful/reqparse.py | 2 +- tests/test_reqparse.py | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/flask_restful/reqparse.py b/flask_restful/reqparse.py index 8fe142e..527bc94 100644 --- flask_restful/reqparse.py +++ flask_restful/reqparse.py @@ -176,7 +176,7 @@ class Argument(object): values = source.getlist(name) else: values = source.get(name) - if not isinstance(values, collections.MutableSequence): + if not (isinstance(values, collections.MutableSequence) and self.action == 'append'): values = [values] for value in values: diff --git a/tests/test_reqparse.py b/tests/test_reqparse.py index ce9ce30..df18ead 100644 --- tests/test_reqparse.py +++ tests/test_reqparse.py @@ -891,5 +891,30 @@ class ReqParseTestCase(unittest.TestCase): self.assertEquals(args['int1'], 1) self.assertEquals(args['int2'], 2) + def test_list_argument(self): + app = Flask(__name__) + + parser = RequestParser() + parser.add_argument('arg1', location='json', type=list) + + with app.test_request_context('/bubble', method="post", + data=json.dumps({'arg1': ['foo', 'bar']}), + content_type='application/json'): + args = parser.parse_args() + self.assertEquals(args['arg1'], ['foo', 'bar']) + + def test_list_argument_dict(self): + app = Flask(__name__) + + parser = RequestParser() + parser.add_argument('arg1', location='json', type=list) + + with app.test_request_context('/bubble', method="post", + data=json.dumps({'arg1': [{'foo': 1, 'bar': 2}]}), + content_type='application/json'): + args = parser.parse_args() + self.assertEquals(args['arg1'], [{'foo': 1, 'bar': 2}]) + + if __name__ == '__main__': unittest.main() -- 2.17.0.rc1