Search code examples
pythonflaskflask-restful

Flask-restful: how to pass multi value params to a GET request?


According to the documentation this is enough to pass in a multi value.

def __init__(self):
        super(LatestNewsAPI, self).__init__()
        self.req_parser = reqparse.RequestParser()
        self.req_parser.add_argument('date', type=str)
        self.req_parser.add_argument('media', action='append')

I'm passing trying to append two media into a list:

    rss_date_time = parser.parse('Tue, 15 Jan 2015 18:13:00 GMT')
    param = {'date': rss_date_time, 'media': 'GRD', 'media': 'IND'}
    url = '/api/v1.0/latest_news/?{0}'.format(urllib.urlencode(param))
    rv = self.client.get(url, headers={},
                         environ_base={'REMOTE_ADDR': '127.0.0.1'})

However once I get there:

def get(self):
    args = self.req_parser.parse_args()
    date_str = args['date']
    date_time = parser.parse(date_str)
    media = args['media']

media contains only [u'IND'].

What am I missing please?


Solution

  • It's actually an urllib problem in this case:

    All I had to add was doseq=True

    url = '/api/v1.0/latest_news/?{0}'.format(urllib.urlencode(param, doseq=True))
    

    and change params to a list:

    param = {'date': rss_date_time, 'media': ['GRD', 'IND']}
    

    Now I get [u'GRD', u'IND']