From 8cf4de206ce4e1fe1e06a55a30c4e6bebe7cf10a Mon Sep 17 00:00:00 2001 From: Aymeric Augustin Date: Sun, 22 May 2022 08:26:21 +0200 Subject: [PATCH] Normalized decorator style for functools.wraps. --- django/views/decorators/clickjacking.py | 9 ++++++--- django/views/decorators/common.py | 3 ++- django/views/decorators/csrf.py | 3 ++- tests/decorators/tests.py | 3 ++- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/django/views/decorators/clickjacking.py b/django/views/decorators/clickjacking.py index 005d942c76..8fa49ddb80 100644 --- a/django/views/decorators/clickjacking.py +++ b/django/views/decorators/clickjacking.py @@ -12,13 +12,14 @@ def xframe_options_deny(view_func): ... """ + @wraps(view_func) def wrapper_view(*args, **kwargs): resp = view_func(*args, **kwargs) if resp.get("X-Frame-Options") is None: resp["X-Frame-Options"] = "DENY" return resp - return wraps(view_func)(wrapper_view) + return wrapper_view def xframe_options_sameorigin(view_func): @@ -32,13 +33,14 @@ def xframe_options_sameorigin(view_func): ... """ + @wraps(view_func) def wrapper_view(*args, **kwargs): resp = view_func(*args, **kwargs) if resp.get("X-Frame-Options") is None: resp["X-Frame-Options"] = "SAMEORIGIN" return resp - return wraps(view_func)(wrapper_view) + return wrapper_view def xframe_options_exempt(view_func): @@ -51,9 +53,10 @@ def xframe_options_exempt(view_func): ... """ + @wraps(view_func) def wrapper_view(*args, **kwargs): resp = view_func(*args, **kwargs) resp.xframe_options_exempt = True return resp - return wraps(view_func)(wrapper_view) + return wrapper_view diff --git a/django/views/decorators/common.py b/django/views/decorators/common.py index a973389549..fe4d58f591 100644 --- a/django/views/decorators/common.py +++ b/django/views/decorators/common.py @@ -8,8 +8,9 @@ def no_append_slash(view_func): """ # view_func.should_append_slash = False would also work, but decorators are # nicer if they don't have side effects, so return a new function. + @wraps(view_func) def wrapper_view(*args, **kwargs): return view_func(*args, **kwargs) wrapper_view.should_append_slash = False - return wraps(view_func)(wrapper_view) + return wrapper_view diff --git a/django/views/decorators/csrf.py b/django/views/decorators/csrf.py index e6c9cb7660..40ac58bc1d 100644 --- a/django/views/decorators/csrf.py +++ b/django/views/decorators/csrf.py @@ -50,8 +50,9 @@ def csrf_exempt(view_func): """Mark a view function as being exempt from the CSRF view protection.""" # view_func.csrf_exempt = True would also work, but decorators are nicer # if they don't have side effects, so return a new function. + @wraps(view_func) def wrapper_view(*args, **kwargs): return view_func(*args, **kwargs) wrapper_view.csrf_exempt = True - return wraps(view_func)(wrapper_view) + return wrapper_view diff --git a/tests/decorators/tests.py b/tests/decorators/tests.py index 38bf0c7ee1..70b03f6a3a 100644 --- a/tests/decorators/tests.py +++ b/tests/decorators/tests.py @@ -159,10 +159,11 @@ class DecoratorsTest(TestCase): # For testing method_decorator, a decorator that assumes a single argument. # We will get type arguments if there is a mismatch in the number of arguments. def simple_dec(func): + @wraps(func) def wrapper(arg): return func("test:" + arg) - return wraps(func)(wrapper) + return wrapper simple_dec_m = method_decorator(simple_dec)