mirror of https://github.com/python/cpython.git
Issue #13544: Add __qualname__ to functools.WRAPPER_ASSIGNMENTS.
Patch by Filip Gruszczyński.
This commit is contained in:
parent
bf6e560d0c
commit
ff7f64ca0e
|
@ -21,7 +21,8 @@
|
||||||
# update_wrapper() and wraps() are tools to help write
|
# update_wrapper() and wraps() are tools to help write
|
||||||
# wrapper functions that can handle naive introspection
|
# wrapper functions that can handle naive introspection
|
||||||
|
|
||||||
WRAPPER_ASSIGNMENTS = ('__module__', '__name__', '__doc__', '__annotations__')
|
WRAPPER_ASSIGNMENTS = ('__module__', '__name__', '__qualname__', '__doc__',
|
||||||
|
'__annotations__')
|
||||||
WRAPPER_UPDATES = ('__dict__',)
|
WRAPPER_UPDATES = ('__dict__',)
|
||||||
def update_wrapper(wrapper,
|
def update_wrapper(wrapper,
|
||||||
wrapped,
|
wrapped,
|
||||||
|
|
|
@ -226,6 +226,7 @@ def test_default_update(self):
|
||||||
self.check_wrapper(wrapper, f)
|
self.check_wrapper(wrapper, f)
|
||||||
self.assertIs(wrapper.__wrapped__, f)
|
self.assertIs(wrapper.__wrapped__, f)
|
||||||
self.assertEqual(wrapper.__name__, 'f')
|
self.assertEqual(wrapper.__name__, 'f')
|
||||||
|
self.assertEqual(wrapper.__qualname__, f.__qualname__)
|
||||||
self.assertEqual(wrapper.attr, 'This is also a test')
|
self.assertEqual(wrapper.attr, 'This is also a test')
|
||||||
self.assertEqual(wrapper.__annotations__['a'], 'This is a new annotation')
|
self.assertEqual(wrapper.__annotations__['a'], 'This is a new annotation')
|
||||||
self.assertNotIn('b', wrapper.__annotations__)
|
self.assertNotIn('b', wrapper.__annotations__)
|
||||||
|
@ -246,6 +247,7 @@ def wrapper():
|
||||||
functools.update_wrapper(wrapper, f, (), ())
|
functools.update_wrapper(wrapper, f, (), ())
|
||||||
self.check_wrapper(wrapper, f, (), ())
|
self.check_wrapper(wrapper, f, (), ())
|
||||||
self.assertEqual(wrapper.__name__, 'wrapper')
|
self.assertEqual(wrapper.__name__, 'wrapper')
|
||||||
|
self.assertNotEqual(wrapper.__qualname__, f.__qualname__)
|
||||||
self.assertEqual(wrapper.__doc__, None)
|
self.assertEqual(wrapper.__doc__, None)
|
||||||
self.assertEqual(wrapper.__annotations__, {})
|
self.assertEqual(wrapper.__annotations__, {})
|
||||||
self.assertFalse(hasattr(wrapper, 'attr'))
|
self.assertFalse(hasattr(wrapper, 'attr'))
|
||||||
|
@ -263,6 +265,7 @@ def wrapper():
|
||||||
functools.update_wrapper(wrapper, f, assign, update)
|
functools.update_wrapper(wrapper, f, assign, update)
|
||||||
self.check_wrapper(wrapper, f, assign, update)
|
self.check_wrapper(wrapper, f, assign, update)
|
||||||
self.assertEqual(wrapper.__name__, 'wrapper')
|
self.assertEqual(wrapper.__name__, 'wrapper')
|
||||||
|
self.assertNotEqual(wrapper.__qualname__, f.__qualname__)
|
||||||
self.assertEqual(wrapper.__doc__, None)
|
self.assertEqual(wrapper.__doc__, None)
|
||||||
self.assertEqual(wrapper.attr, 'This is a different test')
|
self.assertEqual(wrapper.attr, 'This is a different test')
|
||||||
self.assertEqual(wrapper.dict_attr, f.dict_attr)
|
self.assertEqual(wrapper.dict_attr, f.dict_attr)
|
||||||
|
@ -309,17 +312,18 @@ def f():
|
||||||
def wrapper():
|
def wrapper():
|
||||||
pass
|
pass
|
||||||
self.check_wrapper(wrapper, f)
|
self.check_wrapper(wrapper, f)
|
||||||
return wrapper
|
return wrapper, f
|
||||||
|
|
||||||
def test_default_update(self):
|
def test_default_update(self):
|
||||||
wrapper = self._default_update()
|
wrapper, f = self._default_update()
|
||||||
self.assertEqual(wrapper.__name__, 'f')
|
self.assertEqual(wrapper.__name__, 'f')
|
||||||
|
self.assertEqual(wrapper.__qualname__, f.__qualname__)
|
||||||
self.assertEqual(wrapper.attr, 'This is also a test')
|
self.assertEqual(wrapper.attr, 'This is also a test')
|
||||||
|
|
||||||
@unittest.skipIf(not sys.flags.optimize <= 1,
|
@unittest.skipIf(not sys.flags.optimize <= 1,
|
||||||
"Docstrings are omitted with -O2 and above")
|
"Docstrings are omitted with -O2 and above")
|
||||||
def test_default_update_doc(self):
|
def test_default_update_doc(self):
|
||||||
wrapper = self._default_update()
|
wrapper, _ = self._default_update()
|
||||||
self.assertEqual(wrapper.__doc__, 'This is a test')
|
self.assertEqual(wrapper.__doc__, 'This is a test')
|
||||||
|
|
||||||
def test_no_update(self):
|
def test_no_update(self):
|
||||||
|
@ -332,6 +336,7 @@ def wrapper():
|
||||||
pass
|
pass
|
||||||
self.check_wrapper(wrapper, f, (), ())
|
self.check_wrapper(wrapper, f, (), ())
|
||||||
self.assertEqual(wrapper.__name__, 'wrapper')
|
self.assertEqual(wrapper.__name__, 'wrapper')
|
||||||
|
self.assertNotEqual(wrapper.__qualname__, f.__qualname__)
|
||||||
self.assertEqual(wrapper.__doc__, None)
|
self.assertEqual(wrapper.__doc__, None)
|
||||||
self.assertFalse(hasattr(wrapper, 'attr'))
|
self.assertFalse(hasattr(wrapper, 'attr'))
|
||||||
|
|
||||||
|
@ -351,6 +356,7 @@ def wrapper():
|
||||||
pass
|
pass
|
||||||
self.check_wrapper(wrapper, f, assign, update)
|
self.check_wrapper(wrapper, f, assign, update)
|
||||||
self.assertEqual(wrapper.__name__, 'wrapper')
|
self.assertEqual(wrapper.__name__, 'wrapper')
|
||||||
|
self.assertNotEqual(wrapper.__qualname__, f.__qualname__)
|
||||||
self.assertEqual(wrapper.__doc__, None)
|
self.assertEqual(wrapper.__doc__, None)
|
||||||
self.assertEqual(wrapper.attr, 'This is a different test')
|
self.assertEqual(wrapper.attr, 'This is a different test')
|
||||||
self.assertEqual(wrapper.dict_attr, f.dict_attr)
|
self.assertEqual(wrapper.dict_attr, f.dict_attr)
|
||||||
|
|
Loading…
Reference in New Issue