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:
Tyler Smart 2023-08-18 08:44:38 -07:00 committed by GitHub
parent 28cab71f95
commit 9bb576cb07
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 22 additions and 0 deletions

View File

@ -984,6 +984,7 @@ class cached_property:
self.func = func
self.attrname = None
self.__doc__ = func.__doc__
self.__module__ = func.__module__
def __set_name__(self, owner, name):
if self.attrname is None:

View File

@ -111,6 +111,14 @@ class SampleClass:
"""
return cls.a_class_attribute
@functools.cached_property
def a_cached_property(self):
"""
>>> print(SampleClass(29).get())
29
"""
return "hello"
class NestedClass:
"""
>>> x = SampleClass.NestedClass(5)
@ -515,6 +523,7 @@ methods, classmethods, staticmethods, properties, and nested classes.
3 SampleClass.NestedClass
1 SampleClass.NestedClass.__init__
1 SampleClass.__init__
1 SampleClass.a_cached_property
2 SampleClass.a_classmethod
1 SampleClass.a_classmethod_property
1 SampleClass.a_property
@ -571,6 +580,7 @@ functions, classes, and the `__test__` dictionary, if it exists:
3 some_module.SampleClass.NestedClass
1 some_module.SampleClass.NestedClass.__init__
1 some_module.SampleClass.__init__
1 some_module.SampleClass.a_cached_property
2 some_module.SampleClass.a_classmethod
1 some_module.SampleClass.a_classmethod_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
1 SampleClass.NestedClass.__init__
1 SampleClass.__init__
1 SampleClass.a_cached_property
2 SampleClass.a_classmethod
1 SampleClass.a_classmethod_property
1 SampleClass.a_property
@ -634,6 +645,7 @@ displays.
0 SampleClass.NestedClass.get
0 SampleClass.NestedClass.square
1 SampleClass.__init__
1 SampleClass.a_cached_property
2 SampleClass.a_classmethod
1 SampleClass.a_classmethod_property
1 SampleClass.a_property

View File

@ -3105,6 +3105,9 @@ class TestCachedProperty(unittest.TestCase):
def test_doc(self):
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):
"""Caching still works for a subclass defining __set__."""
class readonly_cached_property(py_functools.cached_property):

View File

@ -1706,6 +1706,7 @@ Roman Skurikhin
Ville Skyttä
Michael Sloan
Nick Sloan
Tyler Smart
Radek Smejkal
Václav Šmilauer
Casper W. Smet

View File

@ -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.