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
This commit is contained in:
parent
11aee35a9f
commit
9d6eeeec39
|
@ -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):
|
||||
|
|
|
@ -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.
|
||||
|
|
Loading…
Reference in New Issue