From 362c1b513d5b7354f50dd2371d178c493d498a2f Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Thu, 5 Sep 2013 17:14:32 +0300 Subject: Issue #18830: inspect.getclasstree() no more produces duplicated entries even when input list contains duplicates. --- Lib/inspect.py | 3 ++- Lib/test/inspect_fodder.py | 2 ++ Lib/test/test_inspect.py | 21 +++++++++++++++++++-- Misc/NEWS | 3 +++ 4 files changed, 26 insertions(+), 3 deletions(-) diff --git a/Lib/inspect.py b/Lib/inspect.py index c7e7ef5..9337bd5 100644 --- a/Lib/inspect.py +++ b/Lib/inspect.py @@ -753,7 +753,8 @@ def getclasstree(classes, unique=False): for parent in c.__bases__: if not parent in children: children[parent] = [] - children[parent].append(c) + if c not in children[parent]: + children[parent].append(c) if unique and parent in classes: break elif c not in roots: roots.append(c) diff --git a/Lib/test/inspect_fodder.py b/Lib/test/inspect_fodder.py index ec96eb7..0c1d810 100644 --- a/Lib/test/inspect_fodder.py +++ b/Lib/test/inspect_fodder.py @@ -49,6 +49,8 @@ class StupidGit: class MalodorousPervert(StupidGit): pass +Tit = MalodorousPervert + class ParrotDroppings: pass diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py index 9f5e93b..5cbec9b 100644 --- a/Lib/test/test_inspect.py +++ b/Lib/test/test_inspect.py @@ -224,8 +224,25 @@ class TestRetrievingSourceCode(GetSourceBase): [('FesteringGob', mod.FesteringGob), ('MalodorousPervert', mod.MalodorousPervert), ('ParrotDroppings', mod.ParrotDroppings), - ('StupidGit', mod.StupidGit)]) - tree = inspect.getclasstree([cls[1] for cls in classes], 1) + ('StupidGit', mod.StupidGit), + ('Tit', mod.MalodorousPervert), + ]) + tree = inspect.getclasstree([cls[1] for cls in classes]) + self.assertEqual(tree, + [(object, ()), + [(mod.ParrotDroppings, (object,)), + [(mod.FesteringGob, (mod.MalodorousPervert, + mod.ParrotDroppings)) + ], + (mod.StupidGit, (object,)), + [(mod.MalodorousPervert, (mod.StupidGit,)), + [(mod.FesteringGob, (mod.MalodorousPervert, + mod.ParrotDroppings)) + ] + ] + ] + ]) + tree = inspect.getclasstree([cls[1] for cls in classes], True) self.assertEqual(tree, [(object, ()), [(mod.ParrotDroppings, (object,)), diff --git a/Misc/NEWS b/Misc/NEWS index c7dbe29..66fc600 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -66,6 +66,9 @@ Core and Builtins Library ------- +- Issue #18830: inspect.getclasstree() no more produces duplicated entries even + when input list contains duplicates. + - Issue #18909: Fix _tkinter.tkapp.interpaddr() on Windows 64-bit, don't cast 64-bit pointer to long (32 bits). -- cgit v0.12