refactored drawtree.py

This commit is contained in:
Luciano Ramalho 2021-10-18 14:57:06 -03:00
parent e3ee75adbb
commit c41611668d
3 changed files with 20 additions and 14 deletions

View File

@ -8,15 +8,15 @@ PIPE = f'\N{BOX DRAWINGS LIGHT VERTICAL}{SP*3}' # │
def render_lines(tree_iter): def render_lines(tree_iter):
name, _, _ = next(tree_iter) cls, _, _ = next(tree_iter)
yield name yield cls.__name__
prefix = '' prefix = ''
for name, level, last in tree_iter: for cls, level, last in tree_iter:
prefix = prefix[:4 * (level-1)] prefix = prefix[:4 * (level-1)]
prefix = prefix.replace(TEE, PIPE).replace(ELBOW, SP*4) prefix = prefix.replace(TEE, PIPE).replace(ELBOW, SP*4)
prefix += ELBOW if last else TEE prefix += ELBOW if last else TEE
yield prefix + name yield prefix + cls.__name__
def draw(cls): def draw(cls):

View File

@ -4,7 +4,8 @@ from tree import tree
def test_1_level(): def test_1_level():
class One: pass class One: pass
expected = [('One', 0, True)] expected = [('One', 0, True)]
result = list(tree(One)) result = [(cls.__name__, level, last)
for cls, level, last in tree(One)]
assert expected == result assert expected == result
@ -17,7 +18,8 @@ def test_2_levels_2_leaves():
('Leaf1', 1, False), ('Leaf1', 1, False),
('Leaf2', 1, True), ('Leaf2', 1, True),
] ]
result = list(tree(Branch)) result = [(cls.__name__, level, last)
for cls, level, last in tree(Branch)]
assert expected == result assert expected == result
@ -30,7 +32,8 @@ def test_3_levels_1_leaf():
('Y', 1, True), ('Y', 1, True),
('Z', 2, True), ('Z', 2, True),
] ]
result = list(tree(X)) result = [(cls.__name__, level, last)
for cls, level, last in tree(X)]
assert expected == result assert expected == result
@ -46,7 +49,8 @@ def test_4_levels_1_leaf():
('Level3', 3, True), ('Level3', 3, True),
] ]
result = list(tree(Level0)) result = [(cls.__name__, level, last)
for cls, level, last in tree(Level0)]
assert expected == result assert expected == result
@ -68,7 +72,8 @@ def test_4_levels_3_leaves():
('C2', 2, True), ('C2', 2, True),
] ]
result = list(tree(A)) result = [(cls.__name__, level, last)
for cls, level, last in tree(A)]
assert expected == result assert expected == result
@ -83,7 +88,8 @@ def test_many_levels_1_leaf():
expected.append((name, level, True)) expected.append((name, level, True))
parent = cls parent = cls
result = list(tree(Root)) result = [(cls.__name__, level, last)
for cls, level, last in tree(Root)]
assert len(result) == level_count assert len(result) == level_count
assert result[0] == ('Root', 0, True) assert result[0] == ('Root', 0, True)
assert result[-1] == ('Sub99', 99, True) assert result[-1] == ('Sub99', 99, True)

View File

@ -1,5 +1,5 @@
def tree(cls, level=0, last_in_level=True): def tree(cls, level=0, last_sibling=True):
yield cls.__name__, level, last_in_level yield cls, level, last_sibling
subclasses = cls.__subclasses__() subclasses = cls.__subclasses__()
if subclasses: if subclasses:
last = subclasses[-1] last = subclasses[-1]
@ -8,9 +8,9 @@ def tree(cls, level=0, last_in_level=True):
def display(cls): def display(cls):
for cls_name, level, _ in tree(cls): for cls, level, _ in tree(cls):
indent = ' ' * 4 * level indent = ' ' * 4 * level
print(f'{indent}{cls_name}') print(f'{indent}{cls.__name__}')
if __name__ == '__main__': if __name__ == '__main__':