mirror of
https://github.com/python/cpython.git
synced 2025-09-27 02:39:58 +00:00
gh-107995: Fix doctest collection of functools.cached_property objects (#107996)
Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
This commit is contained in:
parent
28cab71f95
commit
9bb576cb07
5 changed files with 22 additions and 0 deletions
|
@ -984,6 +984,7 @@ class cached_property:
|
||||||
self.func = func
|
self.func = func
|
||||||
self.attrname = None
|
self.attrname = None
|
||||||
self.__doc__ = func.__doc__
|
self.__doc__ = func.__doc__
|
||||||
|
self.__module__ = func.__module__
|
||||||
|
|
||||||
def __set_name__(self, owner, name):
|
def __set_name__(self, owner, name):
|
||||||
if self.attrname is None:
|
if self.attrname is None:
|
||||||
|
|
|
@ -111,6 +111,14 @@ class SampleClass:
|
||||||
"""
|
"""
|
||||||
return cls.a_class_attribute
|
return cls.a_class_attribute
|
||||||
|
|
||||||
|
@functools.cached_property
|
||||||
|
def a_cached_property(self):
|
||||||
|
"""
|
||||||
|
>>> print(SampleClass(29).get())
|
||||||
|
29
|
||||||
|
"""
|
||||||
|
return "hello"
|
||||||
|
|
||||||
class NestedClass:
|
class NestedClass:
|
||||||
"""
|
"""
|
||||||
>>> x = SampleClass.NestedClass(5)
|
>>> x = SampleClass.NestedClass(5)
|
||||||
|
@ -515,6 +523,7 @@ methods, classmethods, staticmethods, properties, and nested classes.
|
||||||
3 SampleClass.NestedClass
|
3 SampleClass.NestedClass
|
||||||
1 SampleClass.NestedClass.__init__
|
1 SampleClass.NestedClass.__init__
|
||||||
1 SampleClass.__init__
|
1 SampleClass.__init__
|
||||||
|
1 SampleClass.a_cached_property
|
||||||
2 SampleClass.a_classmethod
|
2 SampleClass.a_classmethod
|
||||||
1 SampleClass.a_classmethod_property
|
1 SampleClass.a_classmethod_property
|
||||||
1 SampleClass.a_property
|
1 SampleClass.a_property
|
||||||
|
@ -571,6 +580,7 @@ functions, classes, and the `__test__` dictionary, if it exists:
|
||||||
3 some_module.SampleClass.NestedClass
|
3 some_module.SampleClass.NestedClass
|
||||||
1 some_module.SampleClass.NestedClass.__init__
|
1 some_module.SampleClass.NestedClass.__init__
|
||||||
1 some_module.SampleClass.__init__
|
1 some_module.SampleClass.__init__
|
||||||
|
1 some_module.SampleClass.a_cached_property
|
||||||
2 some_module.SampleClass.a_classmethod
|
2 some_module.SampleClass.a_classmethod
|
||||||
1 some_module.SampleClass.a_classmethod_property
|
1 some_module.SampleClass.a_classmethod_property
|
||||||
1 some_module.SampleClass.a_property
|
1 some_module.SampleClass.a_property
|
||||||
|
@ -613,6 +623,7 @@ By default, an object with no doctests doesn't create any tests:
|
||||||
3 SampleClass.NestedClass
|
3 SampleClass.NestedClass
|
||||||
1 SampleClass.NestedClass.__init__
|
1 SampleClass.NestedClass.__init__
|
||||||
1 SampleClass.__init__
|
1 SampleClass.__init__
|
||||||
|
1 SampleClass.a_cached_property
|
||||||
2 SampleClass.a_classmethod
|
2 SampleClass.a_classmethod
|
||||||
1 SampleClass.a_classmethod_property
|
1 SampleClass.a_classmethod_property
|
||||||
1 SampleClass.a_property
|
1 SampleClass.a_property
|
||||||
|
@ -634,6 +645,7 @@ displays.
|
||||||
0 SampleClass.NestedClass.get
|
0 SampleClass.NestedClass.get
|
||||||
0 SampleClass.NestedClass.square
|
0 SampleClass.NestedClass.square
|
||||||
1 SampleClass.__init__
|
1 SampleClass.__init__
|
||||||
|
1 SampleClass.a_cached_property
|
||||||
2 SampleClass.a_classmethod
|
2 SampleClass.a_classmethod
|
||||||
1 SampleClass.a_classmethod_property
|
1 SampleClass.a_classmethod_property
|
||||||
1 SampleClass.a_property
|
1 SampleClass.a_property
|
||||||
|
|
|
@ -3105,6 +3105,9 @@ class TestCachedProperty(unittest.TestCase):
|
||||||
def test_doc(self):
|
def test_doc(self):
|
||||||
self.assertEqual(CachedCostItem.cost.__doc__, "The cost of the item.")
|
self.assertEqual(CachedCostItem.cost.__doc__, "The cost of the item.")
|
||||||
|
|
||||||
|
def test_module(self):
|
||||||
|
self.assertEqual(CachedCostItem.cost.__module__, CachedCostItem.__module__)
|
||||||
|
|
||||||
def test_subclass_with___set__(self):
|
def test_subclass_with___set__(self):
|
||||||
"""Caching still works for a subclass defining __set__."""
|
"""Caching still works for a subclass defining __set__."""
|
||||||
class readonly_cached_property(py_functools.cached_property):
|
class readonly_cached_property(py_functools.cached_property):
|
||||||
|
|
|
@ -1706,6 +1706,7 @@ Roman Skurikhin
|
||||||
Ville Skyttä
|
Ville Skyttä
|
||||||
Michael Sloan
|
Michael Sloan
|
||||||
Nick Sloan
|
Nick Sloan
|
||||||
|
Tyler Smart
|
||||||
Radek Smejkal
|
Radek Smejkal
|
||||||
Václav Šmilauer
|
Václav Šmilauer
|
||||||
Casper W. Smet
|
Casper W. Smet
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
The ``__module__`` attribute on instances of :class:`functools.cached_property`
|
||||||
|
is now set to the name of the module in which the cached_property is defined,
|
||||||
|
rather than "functools". This means that doctests in ``cached_property``
|
||||||
|
docstrings are now properly collected by the :mod:`doctest` module. Patch by
|
||||||
|
Tyler Smart.
|
Loading…
Add table
Add a link
Reference in a new issue