diff --git a/pecan/scaffolds/rest-api/+package+/controllers/root.py b/pecan/scaffolds/rest-api/+package+/controllers/root.py index 18ea5dc..f106bb2 100644 --- a/pecan/scaffolds/rest-api/+package+/controllers/root.py +++ b/pecan/scaffolds/rest-api/+package+/controllers/root.py @@ -1,5 +1,4 @@ from pecan import expose, response, abort -from pecan.rest import RestController people = { 1: 'Luke', @@ -9,30 +8,40 @@ } -class PeopleController(RestController): +class PersonController(object): - @expose('json') - def get_all(self): - return people - - @expose() - def get_one(self, person_id): - return people.get(int(person_id)) or abort(404) + def __init__(self, person_id): + self.person_id = person_id - @expose() - def post(self): - # TODO: Create a new person - response.status = 201 + @expose(generic=True) + def index(self): + return people.get(self.person_id) or abort(404) - @expose() - def put(self, person_id): + @index.when(method='PUT') + def put(self): # TODO: Idempotent PUT (returns 200 or 204) response.status = 204 - @expose() - def delete(self, person_id): + @index.when(method='DELETE') + def delete(self): # TODO: Idempotent DELETE - response.status = 200 + response.status = 204 + + +class PeopleController(object): + + @expose() + def _lookup(self, person_id, *remainder): + return PersonController(int(person_id)), remainder + + @expose(generic=True, template='json') + def index(self): + return people + + @index.when(method='POST', template='json') + def post(self): + # TODO: Create a new person + response.status = 201 class RootController(object): diff --git a/pecan/scaffolds/rest-api/+package+/tests/test_functional.py_tmpl b/pecan/scaffolds/rest-api/+package+/tests/test_functional.py_tmpl index 6f1b43b..db414db 100644 --- a/pecan/scaffolds/rest-api/+package+/tests/test_functional.py_tmpl +++ b/pecan/scaffolds/rest-api/+package+/tests/test_functional.py_tmpl @@ -22,11 +22,11 @@ class TestRootController(FunctionalTest): assert response.status_int == 201 def test_put(self): - response = self.app.put('/people/1') + response = self.app.put('/people/1/') assert response.status_int == 204 def test_delete(self): - response = self.app.delete('/people/1') + response = self.app.delete('/people/1/') assert response.status_int == 204 def test_not_found(self):