I'm using the flask-restful, and I'm having trouble constructing a RequestParser
that will validate a list of only integers. Assuming an expected JSON resource format of the form:
{
'integer_list': [1,3,12,5,22,11, ...] # with a dynamic length
}
... and one would then create a RequestParser using a form something like:
from flask.ext.restful import reqparse
parser = reqparse.RequestParser()
parser.add_argument('integer_list', type=list, location='json')
... but how can i validate is an integer list?
You cannot in fact. Since you can pass a list with multiple kinds of types, e.g.
[1, 2, 'a', 'b']
, with reqparser, you can only parse withtype=list
. You need to check the elements of the list one by one by yourself. The code looks like below:You can check types with isinstance, here you set the type to int (integer).
This would work like this:
evaluates to TRUE
To check this for a whole list use all(). and loop through the list with the for loop so every element of the list gets checked.
In your case this should evaluate to TRUE if all elements are integers and executes the code in the for loop
You can use action='append'. For example:
Pass multiple integer parameters:
And you will get a list of integers:
An invalid request will automatically get a 400 Bad Request response.
Same issue occurred. I looked into the source code, and found
Argument.type
is mainly used in the situationself.type(value)
. So you can hack this like me:It's not what it supposed to do, but works.