From: Serhiy Storchaka <storchaka@gmail.com> Date: Wed, 19 Feb 2014 21:05:12 +0000 (+0200) Subject: Issue #20654: Fixed pydoc for enums with zero value. Patch by Vajrasky Kok. X-Git-Tag: v3.4.1rc1~233^2~271^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=056eb02719497a700e332d2ad69c2b11db0e3552;p=python Issue #20654: Fixed pydoc for enums with zero value. Patch by Vajrasky Kok. --- diff --git a/Lib/pydoc.py b/Lib/pydoc.py index cf164ccfca..3873d5554a 100755 --- a/Lib/pydoc.py +++ b/Lib/pydoc.py @@ -1244,9 +1244,12 @@ location listed above. doc = getdoc(value) else: doc = None - push(self.docother( - getattr(object, name, None) or homecls.__dict__[name], - name, mod, maxlen=70, doc=doc) + '\n') + try: + obj = getattr(object, name) + except AttributeError: + obj = homecls.__dict__[name] + push(self.docother(obj, name, mod, maxlen=70, doc=doc) + + '\n') return attrs attrs = [(name, kind, cls, value) diff --git a/Lib/test/test_pydoc.py b/Lib/test/test_pydoc.py index 105116a5c0..9909b9ae53 100644 --- a/Lib/test/test_pydoc.py +++ b/Lib/test/test_pydoc.py @@ -386,6 +386,16 @@ class PydocDocTest(unittest.TestCase): print_diffs(expected_text, result) self.fail("outputs are not equal, see diff above") + def test_text_enum_member_with_value_zero(self): + # Test issue #20654 to ensure enum member with value 0 can be + # displayed. It used to throw KeyError: 'zero'. + import enum + class BinaryInteger(enum.IntEnum): + zero = 0 + one = 1 + doc = pydoc.render_doc(BinaryInteger) + self.assertIn('<BinaryInteger.zero: 0>', doc) + def test_issue8225(self): # Test issue8225 to ensure no doc link appears for xml.etree result, doc_loc = get_pydoc_text(xml.etree) diff --git a/Misc/NEWS b/Misc/NEWS index 3cd8d25bb7..8c33888b2c 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -28,6 +28,8 @@ Core and Builtins Library ------- +- Issue #20654: Fixed pydoc for enums with zero value. Patch by Vajrasky Kok. + - Issue #20635: Fixed grid_columnconfigure() and grid_rowconfigure() methods of Tkinter widgets to work in wantobjects=True mode.