Commit 804719ff authored by Luke Plant's avatar Luke Plant
Browse files

[1.2.X] Fixed #12019 - backwards compatibility issues with cache_page decorator.

Thanks to rokclimb15 for the report, and j4mie/rokclimb15 for the patches.

Backport of [13864] from trunk

git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.2.X@13865 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent 80b9233e
Loading
Loading
Loading
Loading
+11 −2
Original line number Diff line number Diff line
@@ -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)(key_prefix=key_prefix)


def cache_control(**kwargs):
+4 −0
Original line number Diff line number Diff line
@@ -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.