Return a ClientSideError if unable to convert data
This makes thing works at least for Pecan. Change-Id: I7b02813258d9b8c2eea13e4215a3d711ec2e56ed
This commit is contained in:
parent
e3b324e1e4
commit
8a0c4e66c9
@ -116,3 +116,7 @@ class AuthorsController(RestController):
|
|||||||
@wsmeext.pecan.wsexpose(None, int)
|
@wsmeext.pecan.wsexpose(None, int)
|
||||||
def delete(self, author_id):
|
def delete(self, author_id):
|
||||||
print("Deleting", author_id)
|
print("Deleting", author_id)
|
||||||
|
|
||||||
|
@wsmeext.pecan.wsexpose(Book, int, body=Author)
|
||||||
|
def put(self, author_id, author=None):
|
||||||
|
return author
|
||||||
|
@ -69,6 +69,19 @@ class TestWS(FunctionalTest):
|
|||||||
assert a['id'] == 10
|
assert a['id'] == 10
|
||||||
assert a['firstname'] == 'test'
|
assert a['firstname'] == 'test'
|
||||||
|
|
||||||
|
def test_put_parameter_validate(self):
|
||||||
|
res = self.app.put(
|
||||||
|
'/authors/foobar', '{"firstname": "test"}',
|
||||||
|
headers={"Content-Type": "application/json"},
|
||||||
|
expect_errors=True
|
||||||
|
)
|
||||||
|
self.assertEqual(res.status_int, 400)
|
||||||
|
a = json.loads(res.body.decode('utf-8'))
|
||||||
|
self.assertEqual(
|
||||||
|
a['faultstring'],
|
||||||
|
"Invalid input for field/attribute author_id. "
|
||||||
|
"Value: 'foobar'. unable to convert to int")
|
||||||
|
|
||||||
def test_clientsideerror(self):
|
def test_clientsideerror(self):
|
||||||
expected_status_code = 400
|
expected_status_code = 400
|
||||||
expected_status = http_response_messages[expected_status_code]
|
expected_status = http_response_messages[expected_status_code]
|
||||||
|
@ -4,7 +4,7 @@ import re
|
|||||||
|
|
||||||
from simplegeneric import generic
|
from simplegeneric import generic
|
||||||
|
|
||||||
from wsme.exc import ClientSideError, UnknownArgument
|
from wsme.exc import ClientSideError, UnknownArgument, InvalidInput
|
||||||
|
|
||||||
from wsme.types import iscomplex, list_attributes, Unset
|
from wsme.types import iscomplex, list_attributes, Unset
|
||||||
from wsme.types import UserType, ArrayType, DictType, File
|
from wsme.types import UserType, ArrayType, DictType, File
|
||||||
@ -168,7 +168,13 @@ def dict_from_params(datatype, params, path, hit_paths):
|
|||||||
def args_from_args(funcdef, args, kwargs):
|
def args_from_args(funcdef, args, kwargs):
|
||||||
newargs = []
|
newargs = []
|
||||||
for argdef, arg in zip(funcdef.arguments[:len(args)], args):
|
for argdef, arg in zip(funcdef.arguments[:len(args)], args):
|
||||||
|
try:
|
||||||
newargs.append(from_param(argdef.datatype, arg))
|
newargs.append(from_param(argdef.datatype, arg))
|
||||||
|
except Exception:
|
||||||
|
raise InvalidInput(
|
||||||
|
argdef.name,
|
||||||
|
arg,
|
||||||
|
"unable to convert to %s" % argdef.datatype.__name__)
|
||||||
newkwargs = {}
|
newkwargs = {}
|
||||||
for argname, value in kwargs.items():
|
for argname, value in kwargs.items():
|
||||||
newkwargs[argname] = from_param(
|
newkwargs[argname] = from_param(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user