- data = form.formdata(req)
- spec = inspect.getargspec(callable)
- args = dict(data.items())
- args["req"] = req
- if not spec.keywords:
- for arg in list(args):
- if arg not in spec.args:
- del args[arg]
- for i in range(len(spec.args) - len(spec.defaults)):
- if spec.args[i] not in args:
- raise resp.httperror(400, "Missing parameter", ("The query parameter `", resp.h.code(spec.args[i]), "' is required but not supplied."))
+ try:
+ data = dict(form.formdata(req).items())
+ except IOError:
+ raise resp.httperror(400, "Invalid request", "Form data was incomplete")
+
+ data["req"] = req
+ if haskw:
+ args = data
+ else:
+ args = {}
+ for par in sig.parameters.values():
+ if par.name in data:
+ args[par.name] = data[par.name]
+ for par in sig.parameters.values():
+ if par.kind is inspect.Parameter.VAR_KEYWORD:
+ continue
+ if par.default is inspect.Parameter.empty and par.name not in args:
+ raise resp.httperror(400, "Missing parameter", ("The query parameter `", resp.h.code(par.name), "' is required but not supplied."))