diff --git a/tests/pecantest/test/controllers/ws.py b/tests/pecantest/test/controllers/ws.py index d85ff55..12bdd66 100644 --- a/tests/pecantest/test/controllers/ws.py +++ b/tests/pecantest/test/controllers/ws.py @@ -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 diff --git a/tests/pecantest/test/tests/test_ws.py b/tests/pecantest/test/tests/test_ws.py index 506f0ef..7916672 100644 --- a/tests/pecantest/test/tests/test_ws.py +++ b/tests/pecantest/test/tests/test_ws.py @@ -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 'Client' 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') diff --git a/wsmeext/pecan.py b/wsmeext/pecan.py index 42e1439..59c2fc5 100644 --- a/wsmeext/pecan.py +++ b/wsmeext/pecan.py @@ -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(),