Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit ff7f64c

Browse files
committed
Issue #13544: Add __qualname__ to functools.WRAPPER_ASSIGNMENTS.
Patch by Filip Gruszczyński.
1 parent bf6e560 commit ff7f64c

2 files changed

Lines changed: 11 additions & 4 deletions

File tree

Lib/functools.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@
2121
# update_wrapper() and wraps() are tools to help write
2222
# wrapper functions that can handle naive introspection
2323

24-
WRAPPER_ASSIGNMENTS = ('__module__', '__name__', '__doc__', '__annotations__')
24+
WRAPPER_ASSIGNMENTS = ('__module__', '__name__', '__qualname__', '__doc__',
25+
'__annotations__')
2526
WRAPPER_UPDATES = ('__dict__',)
2627
def update_wrapper(wrapper,
2728
wrapped,

Lib/test/test_functools.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,7 @@ def test_default_update(self):
226226
self.check_wrapper(wrapper, f)
227227
self.assertIs(wrapper.__wrapped__, f)
228228
self.assertEqual(wrapper.__name__, 'f')
229+
self.assertEqual(wrapper.__qualname__, f.__qualname__)
229230
self.assertEqual(wrapper.attr, 'This is also a test')
230231
self.assertEqual(wrapper.__annotations__['a'], 'This is a new annotation')
231232
self.assertNotIn('b', wrapper.__annotations__)
@@ -246,6 +247,7 @@ def wrapper():
246247
functools.update_wrapper(wrapper, f, (), ())
247248
self.check_wrapper(wrapper, f, (), ())
248249
self.assertEqual(wrapper.__name__, 'wrapper')
250+
self.assertNotEqual(wrapper.__qualname__, f.__qualname__)
249251
self.assertEqual(wrapper.__doc__, None)
250252
self.assertEqual(wrapper.__annotations__, {})
251253
self.assertFalse(hasattr(wrapper, 'attr'))
@@ -263,6 +265,7 @@ def wrapper():
263265
functools.update_wrapper(wrapper, f, assign, update)
264266
self.check_wrapper(wrapper, f, assign, update)
265267
self.assertEqual(wrapper.__name__, 'wrapper')
268+
self.assertNotEqual(wrapper.__qualname__, f.__qualname__)
266269
self.assertEqual(wrapper.__doc__, None)
267270
self.assertEqual(wrapper.attr, 'This is a different test')
268271
self.assertEqual(wrapper.dict_attr, f.dict_attr)
@@ -309,17 +312,18 @@ def f():
309312
def wrapper():
310313
pass
311314
self.check_wrapper(wrapper, f)
312-
return wrapper
315+
return wrapper, f
313316

314317
def test_default_update(self):
315-
wrapper = self._default_update()
318+
wrapper, f = self._default_update()
316319
self.assertEqual(wrapper.__name__, 'f')
320+
self.assertEqual(wrapper.__qualname__, f.__qualname__)
317321
self.assertEqual(wrapper.attr, 'This is also a test')
318322

319323
@unittest.skipIf(not sys.flags.optimize <= 1,
320324
"Docstrings are omitted with -O2 and above")
321325
def test_default_update_doc(self):
322-
wrapper = self._default_update()
326+
wrapper, _ = self._default_update()
323327
self.assertEqual(wrapper.__doc__, 'This is a test')
324328

325329
def test_no_update(self):
@@ -332,6 +336,7 @@ def wrapper():
332336
pass
333337
self.check_wrapper(wrapper, f, (), ())
334338
self.assertEqual(wrapper.__name__, 'wrapper')
339+
self.assertNotEqual(wrapper.__qualname__, f.__qualname__)
335340
self.assertEqual(wrapper.__doc__, None)
336341
self.assertFalse(hasattr(wrapper, 'attr'))
337342

@@ -351,6 +356,7 @@ def wrapper():
351356
pass
352357
self.check_wrapper(wrapper, f, assign, update)
353358
self.assertEqual(wrapper.__name__, 'wrapper')
359+
self.assertNotEqual(wrapper.__qualname__, f.__qualname__)
354360
self.assertEqual(wrapper.__doc__, None)
355361
self.assertEqual(wrapper.attr, 'This is a different test')
356362
self.assertEqual(wrapper.dict_attr, f.dict_attr)

0 commit comments

Comments
 (0)