summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Plant <L.Plant.98@cantab.net>2010-09-21 19:32:22 +0000
committerLuke Plant <L.Plant.98@cantab.net>2010-09-21 19:32:22 +0000
commit9d6eeeec39f834ad480778ba7aa4ece01c6f7aff (patch)
tree4230033440099834c7b736387addee48110dc0ea
parent11aee35a9fb72c470364a93186823a327d6840bb (diff)
Fixed #12019 - backwards compatibility issues with cache_page decorator.
Thanks to rokclimb15 for the report, and j4mie/rokclimb15 for the patches. git-svn-id: http://code.djangoproject.com/svn/django/trunk@13864 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/views/decorators/cache.py13
-rw-r--r--tests/regressiontests/decorators/tests.py4
2 files changed, 15 insertions, 2 deletions
diff --git a/django/views/decorators/cache.py b/django/views/decorators/cache.py
index 2296d14daa..bba7cd962f 100644
--- a/django/views/decorators/cache.py
+++ b/django/views/decorators/cache.py
@@ -33,6 +33,10 @@ def cache_page(*args, **kwargs):
# my_view = cache_page(123, key_prefix="foo")(my_view)
# and possibly this way (?):
# my_view = cache_page(123, my_view)
+ # and also this way:
+ # my_view = cache_page(my_view)
+ # and also this way:
+ # my_view = cache_page()(my_view)
# We also add some asserts to give better error messages in case people are
# using other ways to call cache_page that no longer work.
@@ -45,9 +49,14 @@ def cache_page(*args, **kwargs):
elif callable(args[1]):
return decorator_from_middleware_with_args(CacheMiddleware)(cache_timeout=args[0], key_prefix=key_prefix)(args[1])
else:
- assert False, "cache_page must be passed either a single argument (timeout) or a view function and a timeout"
+ assert False, "cache_page must be passed a view function if called with two arguments"
+ elif len(args) == 1:
+ if callable(args[0]):
+ return decorator_from_middleware_with_args(CacheMiddleware)(key_prefix=key_prefix)(args[0])
+ else:
+ return decorator_from_middleware_with_args(CacheMiddleware)(cache_timeout=args[0], key_prefix=key_prefix)
else:
- return decorator_from_middleware_with_args(CacheMiddleware)(cache_timeout=args[0], key_prefix=key_prefix)
+ return decorator_from_middleware_with_args(CacheMiddleware)(key_prefix=key_prefix)
def cache_control(**kwargs):
diff --git a/tests/regressiontests/decorators/tests.py b/tests/regressiontests/decorators/tests.py
index 7855fef638..ea2e10e965 100644
--- a/tests/regressiontests/decorators/tests.py
+++ b/tests/regressiontests/decorators/tests.py
@@ -112,6 +112,10 @@ class DecoratorsTest(TestCase):
self.assertEqual(my_view_cached(HttpRequest()), "response")
my_view_cached2 = cache_page(my_view, 123, key_prefix="test")
self.assertEqual(my_view_cached2(HttpRequest()), "response")
+ my_view_cached3 = cache_page(my_view)
+ self.assertEqual(my_view_cached3(HttpRequest()), "response")
+ my_view_cached4 = cache_page()(my_view)
+ self.assertEqual(my_view_cached4(HttpRequest()), "response")
# For testing method_decorator, a decorator that assumes a single argument.