[Python-checkins] cpython (merge 3.2 -> default): merge #14638: pydoc now treats non-str __name__ as None instead of raising

r.david.murray python-checkins at python.org
Mon Apr 23 19:27:51 CEST 2012


http://hg.python.org/cpython/rev/86b4b54bb0fa
changeset:   76498:86b4b54bb0fa
parent:      76496:55c951167cd9
parent:      76497:2a35dfbe3d99
user:        R David Murray <rdmurray at bitdance.com>
date:        Mon Apr 23 13:26:44 2012 -0400
summary:
  merge #14638: pydoc now treats non-str __name__ as None instead of raising

Original patch by Peter Otten.

files:
  Lib/pydoc.py           |   3 ++-
  Lib/test/test_pydoc.py |  11 +++++++++++
  Misc/NEWS              |   3 +++
  3 files changed, 16 insertions(+), 1 deletions(-)


diff --git a/Lib/pydoc.py b/Lib/pydoc.py
--- a/Lib/pydoc.py
+++ b/Lib/pydoc.py
@@ -1521,7 +1521,8 @@
             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,
         renderer=None):
diff --git a/Lib/test/test_pydoc.py b/Lib/test/test_pydoc.py
--- a/Lib/test/test_pydoc.py
+++ b/Lib/test/test_pydoc.py
@@ -286,6 +286,17 @@
         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 = str(run_pydoc(missing_module), 'ascii')
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -65,6 +65,9 @@
 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.
 

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list