changeset: 93791:d22ca7496c54 user: Yury Selivanov date: Mon Dec 08 15:00:05 2014 -0500 files: Lib/doctest.py Lib/test/test_doctest.py Misc/NEWS description: Issue #21740: Support wrapped callables in pydoc. Patch by Claudiu Popa. diff -r 1eae51406668 -r d22ca7496c54 Lib/doctest.py --- a/Lib/doctest.py Mon Dec 08 12:40:53 2014 -0500 +++ b/Lib/doctest.py Mon Dec 08 15:00:05 2014 -0500 @@ -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 -r 1eae51406668 -r d22ca7496c54 Lib/test/test_doctest.py --- a/Lib/test/test_doctest.py Mon Dec 08 12:40:53 2014 -0500 +++ b/Lib/test/test_doctest.py Mon Dec 08 15:00:05 2014 -0500 @@ -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 - [] + [] 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 -r 1eae51406668 -r d22ca7496c54 Misc/NEWS --- a/Misc/NEWS Mon Dec 08 12:40:53 2014 -0500 +++ b/Misc/NEWS Mon Dec 08 15:00:05 2014 -0500 @@ -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.