From 0a130e1a076b74bbbd364ffa8cb4b1995f04a450 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Israel=20Saeta=20P=C3=A9rez?= Date: Wed, 16 Sep 2015 10:17:30 +0200 Subject: [PATCH] Raise original object action KeyError instead of wrapping it in "Tool does not exist". --- django_object_actions/tests/tests.py | 4 ++++ django_object_actions/utils.py | 3 ++- example_project/polls/admin.py | 5 ++++- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/django_object_actions/tests/tests.py b/django_object_actions/tests/tests.py index a1763f3..e9f0f7b 100644 --- a/django_object_actions/tests/tests.py +++ b/django_object_actions/tests/tests.py @@ -68,3 +68,7 @@ def test_intermediate_page_with_post_works(self): def test_undefined_tool_404s(self): response = self.client.get('/admin/polls/choice/1/tools/weeeewoooooo/') self.assertEqual(response.status_code, 404) + + def test_key_error_tool_500s(self): + self.assertRaises(KeyError, self.client.get, + '/admin/polls/choice/1/tools/raise_key_error/') diff --git a/django_object_actions/utils.py b/django_object_actions/utils.py index f2f17d1..f33e35a 100644 --- a/django_object_actions/utils.py +++ b/django_object_actions/utils.py @@ -112,9 +112,10 @@ def get(self, request, **kwargs): # is instantiated with `model` and the urlpattern has `pk`. obj = self.get_object() try: - ret = self.tools[kwargs['tool']](request, obj) + tool = self.tools[kwargs['tool']] except KeyError: raise Http404(u'Tool does not exist') + ret = tool(request, obj) if isinstance(ret, HttpResponse): return ret back = request.path.rsplit('/', 3)[0] + '/' diff --git a/example_project/polls/admin.py b/example_project/polls/admin.py index ca71be8..22c08fa 100644 --- a/example_project/polls/admin.py +++ b/example_project/polls/admin.py @@ -39,8 +39,11 @@ def edit_poll(self, request, obj): url = reverse('admin:polls_poll_change', args=(obj.poll.pk,)) return HttpResponseRedirect(url) + def raise_key_error(self, request, obj): + raise KeyError + objectactions = ('increment_vote', 'decrement_vote', 'reset_vote', - 'edit_poll') + 'edit_poll', 'raise_key_error') actions = ['increment_vote'] admin.site.register(Choice, ChoiceAdmin)