]> granicus.if.org Git - python/commitdiff
Make “pydoc somebuiltin.somemethod” work (#8887)
authorÉric Araujo <merwok@netwok.org>
Fri, 29 Jul 2011 15:34:35 +0000 (17:34 +0200)
committerÉric Araujo <merwok@netwok.org>
Fri, 29 Jul 2011 15:34:35 +0000 (17:34 +0200)
Lib/pydoc.py
Lib/test/test_pydoc.py
Misc/NEWS

index ecbdb44698af8cce040939cab6bad34c974a5294..d08d1ac4f1d37d0bd42daf47de9cb8fd4eba4cb5 100755 (executable)
@@ -1454,13 +1454,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(__builtin__, path):
-            return getattr(__builtin__, path)
+        object = __builtin__
+    for part in parts[n:]:
+        try:
+            object = getattr(object, part)
+        except AttributeError:
+            return None
+    return object
 
 # --------------------------------------- interactive interpreter interface
 
index 85916932384bf197924b4632d8b58fd7a762c217..d98faecfef2134f1f8f57e8f7c5666294a0d0565 100644 (file)
@@ -1,8 +1,8 @@
-import sys
 import os
-import os.path
+import sys
 import difflib
 import subprocess
+import __builtin__
 import re
 import pydoc
 import inspect
@@ -357,6 +357,23 @@ class TestHelper(unittest.TestCase):
         self.assertEqual(sorted(pydoc.Helper.keywords),
                          sorted(keyword.kwlist))
 
+    def test_builtin(self):
+        for name in ('str', 'str.translate', '__builtin__.str',
+                     '__builtin__.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 ('not__builtin__', 'strrr', 'strr.translate',
+                     'str.trrrranslate', '__builtin__.strrr',
+                     '__builtin__.str.trrranslate'):
+            self.assertIsNone(pydoc.locate(name))
+            self.assertRaises(ImportError, pydoc.render_doc, name)
+
 
 def test_main():
     test.test_support.run_unittest(PyDocDocTest,
index de2cff51124e5002a5b0d94d319a720dd093abcc..fc4dfe9c0e5ef4b603d48fde43418c1132c8c12a 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -37,6 +37,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 #12603: Fix pydoc.synopsis() on files with non-negative st_mtime.
 
 - Issue #12514: Use try/finally to assure the timeit module restores garbage