Skip to content

Commit

Permalink
Merge pull request #63 from kgriffs/master
Browse files Browse the repository at this point in the history
Issue #18
  • Loading branch information
kgriffs committed Feb 4, 2013
2 parents 146288a + c94b924 commit 791438f
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 6 deletions.
33 changes: 33 additions & 0 deletions falcon/request.py
Original file line number Diff line number Diff line change
Expand Up @@ -190,3 +190,36 @@ def get_param_as_int(self, name, default=None, required=False):

raise HTTPBadRequest('Missing query parameter',
'The "' + name + '" query parameter is required.')

def get_param_as_list(self, name, default=None, required=False):
"""Return the value of a query string parameter as an int
Args:
name: Parameter name, case-sensitive (e.g., 'limit')
default: Value to return in case the parameter is not found in the
query string, or it is not an integer (default None)
required: Set to True to raise HTTPBadRequest instead of returning
gracefully when the parameter is not found or is not an
integer (default False)
Returns:
The value of the param if it is found and can be converted to an
integer. Otherwise, returns the default value unless required is
True.
Raises
HTTPBadRequest: The param was not found in the request, but was
required.
"""

# PERF: Use if..in since it is a good all-around performer; we don't
# know how likely params are to be specified by clients.
if name in self._params:
return self._params[name].split(',')

if not required:
return default

raise HTTPBadRequest('Missing query parameter',
'The "' + name + '" query parameter is required.')
3 changes: 0 additions & 3 deletions falcon/request_helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,6 @@ def parse_query_string(query_string):
# PERF: use for loop in lieu of the dict constructor
params = {}
for k, v in QS_PATTERN.findall(query_string):
if ',' in v:
v = v.split(',')

params[k] = v

return params
Expand Down
9 changes: 6 additions & 3 deletions tests/test_query_params.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,15 +36,18 @@ def test_list_type(self):
self._simulate_request('/', query_string=query_string)

req = self.resource.req
self.assertEquals(req.get_param('colors'),
self.assertEquals(req.get_param('colors'), 'red,green,blue')
self.assertEquals(req.get_param_as_list('colors'),
['red', 'green', 'blue'])
self.assertEquals(req.get_param('limit'), '1')
self.assertEquals(req.get_param_as_list('limit'), ['1'])
self.assertEquals(req.get_param_as_list('marker'), None)

def test_bogus_input(self):
query_string = 'colors=red,green,&limit=1&pickle'
self._simulate_request('/', query_string=query_string)

req = self.resource.req
self.assertEquals(req.get_param('colors'), ['red', 'green', ''])
self.assertEquals(req.get_param_as_list('colors'),
['red', 'green', ''])
self.assertEquals(req.get_param('limit'), '1')
self.assertEquals(req.get_param('pickle'), None)

0 comments on commit 791438f

Please sign in to comment.