Merged in asalkeld/wsme-2 (pull request #15)
pecan: Make it possible to use the Response to return non-default status codes.
This commit is contained in:
commit
8753691839
@ -70,6 +70,10 @@ class AuthorsController(RestController):
|
||||
def get(self, id):
|
||||
if id == 999:
|
||||
raise wsme.exc.ClientSideError('Wrong ID')
|
||||
|
||||
if id == 911:
|
||||
return wsme.api.Response(Author(),
|
||||
status_code=401)
|
||||
author = Author()
|
||||
author.id = id
|
||||
author.firstname = u"aname"
|
||||
@ -81,7 +85,7 @@ class AuthorsController(RestController):
|
||||
]
|
||||
return author
|
||||
|
||||
@wsmeext.pecan.wsexpose(Author, body=Author)
|
||||
@wsmeext.pecan.wsexpose(Author, body=Author, status_code=201)
|
||||
def post(self, author):
|
||||
author.id = 10
|
||||
return author
|
||||
|
@ -63,6 +63,7 @@ class TestWS(FunctionalTest):
|
||||
'/authors', '{"firstname": "test"}',
|
||||
headers={"Content-Type": "application/json"}
|
||||
)
|
||||
assert res.status_int == 201
|
||||
a = json.loads(res.body)
|
||||
print a
|
||||
assert a['id'] == 10
|
||||
@ -87,6 +88,14 @@ class TestWS(FunctionalTest):
|
||||
self.assertEqual(res.status, '400 Bad Request')
|
||||
assert '<faultcode>Client</faultcode>' in res.body
|
||||
|
||||
def test_non_default_response(self):
|
||||
res = self.app.get(
|
||||
'/authors/911.json',
|
||||
expect_errors=True
|
||||
)
|
||||
self.assertEqual(res.status_int, 401)
|
||||
self.assertEqual(res.status, '401 Unauthorized')
|
||||
|
||||
def test_serversideerror(self):
|
||||
res = self.app.get('/divide_by_zero.json', expect_errors=True)
|
||||
self.assertEqual(res.status, '500 Internal Server Error')
|
||||
|
@ -68,6 +68,13 @@ def wsexpose(*args, **kwargs):
|
||||
if funcdef.pass_request:
|
||||
kwargs[funcdef.pass_request] = pecan.request
|
||||
result = f(self, *args, **kwargs)
|
||||
|
||||
# NOTE: Support setting of status_code with default 201
|
||||
pecan.response.status = funcdef.status_code
|
||||
if isinstance(result, wsme.api.Response):
|
||||
pecan.response.status = result.status_code
|
||||
result = result.obj
|
||||
|
||||
except:
|
||||
data = wsme.api.format_exception(
|
||||
sys.exc_info(),
|
||||
|
Loading…
x
Reference in New Issue
Block a user