From 354bbf1fd22cd0a826e8da75ba16bc28fc274868 Mon Sep 17 00:00:00 2001 From: Vinay Karanam Date: Mon, 23 Aug 2021 18:28:38 +0530 Subject: [4.0.x] Fixed #33043 -- Made method_decorator() preserve wrapper assignments. Regression in f434f5b84f7fcea9a76a551621ecce70786e2899. Backport of 8806e8809e023017e6958b9fa0bbd960938e0a91 from main --- tests/decorators/tests.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'tests') diff --git a/tests/decorators/tests.py b/tests/decorators/tests.py index 46b01c1852..e496e2c790 100644 --- a/tests/decorators/tests.py +++ b/tests/decorators/tests.py @@ -425,6 +425,29 @@ class MethodDecoratorTests(SimpleTestCase): def __module__(cls): return "tests" + def test_wrapper_assignments(self): + """@method_decorator preserves wrapper assignments.""" + func_name = None + func_module = None + + def decorator(func): + @wraps(func) + def inner(*args, **kwargs): + nonlocal func_name, func_module + func_name = getattr(func, '__name__', None) + func_module = getattr(func, '__module__', None) + return func(*args, **kwargs) + return inner + + class Test: + @method_decorator(decorator) + def method(self): + return 'tests' + + Test().method() + self.assertEqual(func_name, 'method') + self.assertIsNotNone(func_module) + class XFrameOptionsDecoratorsTests(TestCase): """ -- cgit v1.3