summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorR David Murray <rdmurray@bitdance.com>2012-04-23 17:27:11 (GMT)
committerR David Murray <rdmurray@bitdance.com>2012-04-23 17:27:11 (GMT)
commitc313b1d9b0a8afe47fdd58d4685fa3d19ab79e57 (patch)
treea12e865512bc2ca67378b75c1aa0588737d5875d
parent4c20c4e198b0a87f94a814d891ef18bf2d49864a (diff)
downloadcpython-c313b1d9b0a8afe47fdd58d4685fa3d19ab79e57.zip
cpython-c313b1d9b0a8afe47fdd58d4685fa3d19ab79e57.tar.gz
cpython-c313b1d9b0a8afe47fdd58d4685fa3d19ab79e57.tar.bz2
#14638: pydoc now treats non-str __name__ as None instead of raising
Original patch by Peter Otten.
-rwxr-xr-xLib/pydoc.py3
-rw-r--r--Lib/test/test_pydoc.py11
-rw-r--r--Misc/NEWS3
3 files changed, 16 insertions, 1 deletions
diff --git a/Lib/pydoc.py b/Lib/pydoc.py
index 674af6a..68ba21f 100755
--- a/Lib/pydoc.py
+++ b/Lib/pydoc.py
@@ -1498,7 +1498,8 @@ def resolve(thing, forceload=0):
raise ImportError, 'no Python documentation found for %r' % thing
return object, thing
else:
- return thing, getattr(thing, '__name__', None)
+ name = getattr(thing, '__name__', None)
+ return thing, name if isinstance(name, str) else None
def render_doc(thing, title='Python Library Documentation: %s', forceload=0):
"""Render text documentation, given an object or a path to an object."""
diff --git a/Lib/test/test_pydoc.py b/Lib/test/test_pydoc.py
index 59cbffe..d95e706 100644
--- a/Lib/test/test_pydoc.py
+++ b/Lib/test/test_pydoc.py
@@ -249,6 +249,17 @@ class PyDocDocTest(unittest.TestCase):
result, doc_loc = get_pydoc_text(xml.etree)
self.assertEqual(doc_loc, "", "MODULE DOCS incorrectly includes a link")
+ def test_non_str_name(self):
+ # issue14638
+ # Treat illegal (non-str) name like no name
+ class A:
+ __name__ = 42
+ class B:
+ pass
+ adoc = pydoc.render_doc(A())
+ bdoc = pydoc.render_doc(B())
+ self.assertEqual(adoc.replace("A", "B"), bdoc)
+
def test_not_here(self):
missing_module = "test.i_am_not_here"
result = run_pydoc(missing_module)
diff --git a/Misc/NEWS b/Misc/NEWS
index eb0c9de..9f7cbdd 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -50,6 +50,9 @@ Core and Builtins
Library
-------
+- Issue #14638: pydoc now treats non-string __name__ values as if they
+ were missing, instead of raising an error.
+
- Issue #13684: Fix httplib tunnel issue of infinite loops for certain sites
which send EOF without trailing \r\n.