Skip to content

Commit

Permalink
simple var parse support added
Browse files Browse the repository at this point in the history
  • Loading branch information
petr-s committed Mar 8, 2016
1 parent 18a1430 commit e7c1288
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 1 deletion.
11 changes: 10 additions & 1 deletion clearest/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@

KEY_PATTERN = re.compile("\{(.*)\}")
STATUS_FMT = "{code} {msg}"
CALLABLE = 0
DEFAULT = 1


class Key(object):
Expand Down Expand Up @@ -82,10 +84,17 @@ def is_matching(signature, args, path, query):


def parse_args(args, path, query):
def one_or_many(dict_, key):
return dict_[key][0] if len(dict_[key]) == 1 else dict_[key]

kwargs = {}
for arg, parse_fn in six.iteritems(args):
if parse_fn is None:
kwargs[arg] = query[arg][0] if len(query[arg]) == 1 else query[arg]
kwargs[arg] = one_or_many(query, arg)
elif isinstance(parse_fn, tuple):
kwargs[arg] = parse_fn[DEFAULT] if arg not in query else parse_fn[CALLABLE](one_or_many(query, arg))
else:
kwargs[arg] = parse_fn(one_or_many(query, arg))
return kwargs


Expand Down
30 changes: 30 additions & 0 deletions tests/test_application.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,3 +46,33 @@ def asd(a):
self.get("/asd?a=hi")
self.assertEqual(HTTP_OK, self.status)
self.assertEqual((("hi",), {}), asd.called_with)

def test_application_simple_var_parse(self):
@GET("/asd")
@called_with
def asd(a=int):
return {}

self.get("/asd?a=42")
self.assertEqual(HTTP_OK, self.status)
self.assertEqual(((42,), {}), asd.called_with)

def test_application_simple_var_default(self):
@GET("/asd")
@called_with
def asd(a=(int, 0)):
return {}

self.get("/asd")
self.assertEqual(HTTP_OK, self.status)
self.assertEqual(((0,), {}), asd.called_with)

def test_application_simple_var_parse_default(self):
@GET("/asd")
@called_with
def asd(a=(int, 0)):
return {}

self.get("/asd?a=42")
self.assertEqual(HTTP_OK, self.status)
self.assertEqual(((42,), {}), asd.called_with)

0 comments on commit e7c1288

Please sign in to comment.