From d0032458a26bdd51729ce6ce372ec2c8094a96b6 Mon Sep 17 00:00:00 2001 From: Gary Wilson Jr Date: Mon, 17 Mar 2008 17:47:34 +0000 Subject: [PATCH] Fixed #6679 -- In `decorator_from_middleware`, don't unpack arguments when calling a middleware's `process_view` method, thanks Gulopine. git-svn-id: http://code.djangoproject.com/svn/django/trunk@7269 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/utils/decorators.py | 2 +- tests/regressiontests/utils/decorators.py | 13 +++++++++++++ tests/regressiontests/utils/tests.py | 1 + tests/regressiontests/utils/urls.py | 7 +++++++ tests/regressiontests/utils/views.py | 10 ++++++++++ tests/urls.py | 4 +++- 6 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 tests/regressiontests/utils/decorators.py create mode 100644 tests/regressiontests/utils/urls.py create mode 100644 tests/regressiontests/utils/views.py diff --git a/django/utils/decorators.py b/django/utils/decorators.py index 27a080e7409..8fc4c1d96a3 100644 --- a/django/utils/decorators.py +++ b/django/utils/decorators.py @@ -41,7 +41,7 @@ def decorator_from_middleware(middleware_class): if result is not None: return result if hasattr(middleware, 'process_view'): - result = middleware.process_view(request, view_func, *args, **kwargs) + result = middleware.process_view(request, view_func, args, kwargs) if result is not None: return result try: diff --git a/tests/regressiontests/utils/decorators.py b/tests/regressiontests/utils/decorators.py new file mode 100644 index 00000000000..c6ae243c980 --- /dev/null +++ b/tests/regressiontests/utils/decorators.py @@ -0,0 +1,13 @@ +from django.test import TestCase + +class DecoratorFromMiddlewareTests(TestCase): + """ + Tests for view decorators created using + ``django.utils.decorators.decorator_from_middleware``. + """ + + def test_process_view_middleware(self): + """ + Test a middleware that implements process_view. + """ + self.client.get('/utils/xview/') diff --git a/tests/regressiontests/utils/tests.py b/tests/regressiontests/utils/tests.py index abcd7212d8d..6fc645505bf 100644 --- a/tests/regressiontests/utils/tests.py +++ b/tests/regressiontests/utils/tests.py @@ -8,6 +8,7 @@ from django.utils import html, checksums import timesince import datastructures +from decorators import DecoratorFromMiddlewareTests # Extra tests __test__ = { diff --git a/tests/regressiontests/utils/urls.py b/tests/regressiontests/utils/urls.py new file mode 100644 index 00000000000..7b60d0884cd --- /dev/null +++ b/tests/regressiontests/utils/urls.py @@ -0,0 +1,7 @@ +from django.conf.urls.defaults import * + +import views + +urlpatterns = patterns('', + (r'^xview/$', views.xview), +) diff --git a/tests/regressiontests/utils/views.py b/tests/regressiontests/utils/views.py new file mode 100644 index 00000000000..d22ae266419 --- /dev/null +++ b/tests/regressiontests/utils/views.py @@ -0,0 +1,10 @@ +from django.http import HttpResponse +from django.utils.decorators import decorator_from_middleware +from django.middleware.doc import XViewMiddleware + + +xview_dec = decorator_from_middleware(XViewMiddleware) + +def xview(request): + return HttpResponse() +xview = xview_dec(xview) diff --git a/tests/urls.py b/tests/urls.py index 174e06969bf..41b4aaf6d3a 100644 --- a/tests/urls.py +++ b/tests/urls.py @@ -11,10 +11,12 @@ urlpatterns = patterns('', # test urlconf for {% url %} template tag (r'^url_tag/', include('regressiontests.templates.urls')), - + # django built-in views (r'^views/', include('regressiontests.views.urls')), # test urlconf for middleware tests (r'^middleware/', include('regressiontests.middleware.urls')), + + (r'^utils/', include('regressiontests.utils.urls')), )