Issue #21740: Support wrapped callables in pydoc. Patch by Claudiu Popa.
diff --git a/Lib/doctest.py b/Lib/doctest.py
index b227952..bb9f432 100644
--- a/Lib/doctest.py
+++ b/Lib/doctest.py
@@ -985,7 +985,8 @@
             for valname, val in obj.__dict__.items():
                 valname = '%s.%s' % (name, valname)
                 # Recurse to functions & classes.
-                if ((inspect.isroutine(val) or inspect.isclass(val)) and
+                if ((inspect.isroutine(inspect.unwrap(val))
+                     or inspect.isclass(val)) and
                     self._from_module(module, val)):
                     self._find(tests, val, valname, module, source_lines,
                                globs, seen)
diff --git a/Lib/test/test_doctest.py b/Lib/test/test_doctest.py
index 4b8d0d2..95700a3 100644
--- a/Lib/test/test_doctest.py
+++ b/Lib/test/test_doctest.py
@@ -4,6 +4,7 @@
 
 from test import support
 import doctest
+import functools
 import os
 import sys
 
@@ -434,7 +435,7 @@
     >>> tests = finder.find(sample_func)
 
     >>> print(tests)  # doctest: +ELLIPSIS
-    [<DocTest sample_func from ...:18 (1 example)>]
+    [<DocTest sample_func from ...:19 (1 example)>]
 
 The exact name depends on how test_doctest was invoked, so allow for
 leading path components.
@@ -2364,6 +2365,22 @@
       foo \n
     """
 
+class Wrapper:
+    def __init__(self, func):
+        self.func = func
+        functools.update_wrapper(self, func)
+
+    def __call__(self, *args, **kwargs):
+        self.func(*args, **kwargs)
+
+@Wrapper
+def test_look_in_unwrapped():
+    """
+    Docstrings in wrapped functions must be detected as well.
+
+    >>> 'one other test'
+    'one other test'
+    """
 
 def test_unittest_reportflags():
     """Default unittest reporting flags can be set to control reporting
diff --git a/Misc/NEWS b/Misc/NEWS
index d7c9a49..9ca0f1f 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -194,6 +194,8 @@
 Library
 -------
 
+- Issue #21740: Support wrapped callables in pydoc. Patch by Claudiu Popa.
+
 - Issue #23009: Make sure selectors.EpollSelecrtor.select() works when no
   FD is registered.