summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorÉric Araujo <merwok@netwok.org>2011-07-29 15:38:23 (GMT)
committerÉric Araujo <merwok@netwok.org>2011-07-29 15:38:23 (GMT)
commitc473f8ceac03338657cb30314b4b1c8733b17ac9 (patch)
tree40c4a0a2a91119013a44ef3e76d9247cae5a1292
parent947fed42b8f1eb6c1b7cc9dec4e51db589d76bd8 (diff)
parente64e51bfa78cd8ec046e187a3214cd9d477fc65c (diff)
downloadcpython-c473f8ceac03338657cb30314b4b1c8733b17ac9.zip
cpython-c473f8ceac03338657cb30314b4b1c8733b17ac9.tar.gz
cpython-c473f8ceac03338657cb30314b4b1c8733b17ac9.tar.bz2
Merge fix for #8887 from 3.2
-rwxr-xr-xLib/pydoc.py13
-rw-r--r--Lib/test/test_pydoc.py18
-rw-r--r--Misc/NEWS3
3 files changed, 28 insertions, 6 deletions
diff --git a/Lib/pydoc.py b/Lib/pydoc.py
index ebd8a61..f0b0200 100755
--- a/Lib/pydoc.py
+++ b/Lib/pydoc.py
@@ -1479,13 +1479,14 @@ def locate(path, forceload=0):
else: break
if module:
object = module
- for part in parts[n:]:
- try: object = getattr(object, part)
- except AttributeError: return None
- return object
else:
- if hasattr(builtins, path):
- return getattr(builtins, path)
+ object = builtins
+ for part in parts[n:]:
+ try:
+ object = getattr(object, part)
+ except AttributeError:
+ return None
+ return object
# --------------------------------------- interactive interpreter interface
diff --git a/Lib/test/test_pydoc.py b/Lib/test/test_pydoc.py
index 7591303..ae56996 100644
--- a/Lib/test/test_pydoc.py
+++ b/Lib/test/test_pydoc.py
@@ -1,5 +1,6 @@
import os
import sys
+import builtins
import difflib
import inspect
import pydoc
@@ -425,6 +426,23 @@ class TestDescriptions(unittest.TestCase):
expected = 'C in module %s object' % __name__
self.assertIn(expected, pydoc.render_doc(c))
+ def test_builtin(self):
+ for name in ('str', 'str.translate', 'builtins.str',
+ 'builtins.str.translate'):
+ # test low-level function
+ self.assertIsNotNone(pydoc.locate(name))
+ # test high-level function
+ try:
+ pydoc.render_doc(name)
+ except ImportError:
+ self.fail('finding the doc of {!r} failed'.format(o))
+
+ for name in ('notbuiltins', 'strrr', 'strr.translate',
+ 'str.trrrranslate', 'builtins.strrr',
+ 'builtins.str.trrranslate'):
+ self.assertIsNone(pydoc.locate(name))
+ self.assertRaises(ImportError, pydoc.render_doc, name)
+
@unittest.skipUnless(threading, 'Threading required for this test.')
class PydocServerTest(unittest.TestCase):
diff --git a/Misc/NEWS b/Misc/NEWS
index d90faf9..34ceb2a 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -244,6 +244,9 @@ Core and Builtins
Library
-------
+- Issue #8887: "pydoc somebuiltin.somemethod" (or help('somebuiltin.somemethod')
+ in Python code) now finds the doc of the method.
+
- Issue #10968: Remove indirection in threading. The public names (Thread,
Condition, etc.) used to be factory functions returning instances of hidden
classes (_Thread, _Condition, etc.), because (if Guido recalls correctly) this