From 32222fd91d0865b46ac1984f417d7f718855c1a9 Mon Sep 17 00:00:00 2001 From: Sven Steinbauer Date: Fri, 4 Oct 2013 14:50:05 +0100 Subject: [PATCH 1/2] Adds test for null relation returning 404 If a relation is null and is fetched with /api/pets/2/user an exception is raised raised rather than a 404 being returned --- tests/test_views.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/tests/test_views.py b/tests/test_views.py index 0e73a27e..647c9c54 100644 --- a/tests/test_views.py +++ b/tests/test_views.py @@ -107,9 +107,10 @@ def test_get(self): owner = self.User() pet1 = self.Pet() pet2 = self.Pet() + pet3 = self.Pet() pet1.owner = owner pet2.owner = owner - self.db.session.add_all([owner, pet1, pet2]) + self.db.session.add_all([owner, pet1, pet2, pet3]) self.db.session.commit() response = self.app.get('/api/user/%d' % owner.id) @@ -147,6 +148,15 @@ def test_get(self): assert not isinstance(data['owner'], list) assert owner.id == data['ownerid'] + # Check that it's possible to get owner if not null + response = self.app.get('/api/pet/1/owner') + assert 200 == response.status_code + data = loads(response.data) + assert 2 == len(data['pets']) + # And that we get a 404 if owner is null + response = self.app.get('/api/pet/3/owner') + assert 404 == response.status_code + # skip_unless should be used as a decorator, but Python 2.5 doesn't have # decorators. From f69ca74a1bdf73fe178a9659ab486a5895c0a8ef Mon Sep 17 00:00:00 2001 From: Sven Steinbauer Date: Fri, 4 Oct 2013 14:51:15 +0100 Subject: [PATCH 2/2] Returns a 404 is a relation is None --- flask_restless/views.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/flask_restless/views.py b/flask_restless/views.py index 3ad70332..e3936b2d 100644 --- a/flask_restless/views.py +++ b/flask_restless/views.py @@ -1006,6 +1006,8 @@ def get(self, instid, relationname, relationinstid): result = self._paginated(list(related_value), deep) else: result = to_dict(related_value, deep) + if result is None: + abort(404) for postprocessor in self.postprocessors['GET_SINGLE']: postprocessor(result=result) return jsonpify(result)