Skip to content

Commit 3d02d97

Browse files
committed
gh-107995: Fix doctest collection of functools.cached_property objects
1 parent a794ebe commit 3d02d97

File tree

3 files changed

+21
-0
lines changed

3 files changed

+21
-0
lines changed

Lib/doctest.py

+8
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ def _test():
9494

9595
import __future__
9696
import difflib
97+
import functools
9798
import inspect
9899
import linecache
99100
import os
@@ -1044,6 +1045,13 @@ def _find(self, tests, obj, name, module, source_lines, globs, seen):
10441045
if isinstance(val, (staticmethod, classmethod)):
10451046
val = val.__func__
10461047

1048+
# For functools.cached_property objects, val is considered
1049+
# to be defined in the functools module instead of the
1050+
# module being inspected by doctest, so we grab the underlying
1051+
# function instead to inspect it for doctests.
1052+
if isinstance(val, functools.cached_property):
1053+
val = val.func
1054+
10471055
# Recurse to methods, properties, and nested classes.
10481056
if ((inspect.isroutine(val) or inspect.isclass(val) or
10491057
isinstance(val, property)) and

Lib/test/test_doctest.py

+12
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,14 @@ def a_classmethod_property(cls):
111111
"""
112112
return cls.a_class_attribute
113113

114+
@functools.cached_property
115+
def a_cached_property(self):
116+
"""
117+
>>> print(SampleClass(29).get())
118+
29
119+
"""
120+
return "hello"
121+
114122
class NestedClass:
115123
"""
116124
>>> x = SampleClass.NestedClass(5)
@@ -515,6 +523,7 @@ def basics(): r"""
515523
3 SampleClass.NestedClass
516524
1 SampleClass.NestedClass.__init__
517525
1 SampleClass.__init__
526+
1 SampleClass.a_cached_property
518527
2 SampleClass.a_classmethod
519528
1 SampleClass.a_classmethod_property
520529
1 SampleClass.a_property
@@ -571,6 +580,7 @@ def basics(): r"""
571580
3 some_module.SampleClass.NestedClass
572581
1 some_module.SampleClass.NestedClass.__init__
573582
1 some_module.SampleClass.__init__
583+
1 some_module.SampleClass.a_cached_property
574584
2 some_module.SampleClass.a_classmethod
575585
1 some_module.SampleClass.a_classmethod_property
576586
1 some_module.SampleClass.a_property
@@ -613,6 +623,7 @@ def basics(): r"""
613623
3 SampleClass.NestedClass
614624
1 SampleClass.NestedClass.__init__
615625
1 SampleClass.__init__
626+
1 SampleClass.a_cached_property
616627
2 SampleClass.a_classmethod
617628
1 SampleClass.a_classmethod_property
618629
1 SampleClass.a_property
@@ -634,6 +645,7 @@ def basics(): r"""
634645
0 SampleClass.NestedClass.get
635646
0 SampleClass.NestedClass.square
636647
1 SampleClass.__init__
648+
1 SampleClass.a_cached_property
637649
2 SampleClass.a_classmethod
638650
1 SampleClass.a_classmethod_property
639651
1 SampleClass.a_property
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fix :mod:`doctest` collection of :func:`functools.cached_property` objects.

0 commit comments

Comments
 (0)