asciitree¶
asciitree draws tree structures using characters.
ASCII Trees¶
asciitree
+-- sometimes
| +-- you
+-- just
| +-- want
| +-- to
| +-- draw
+-- trees
+-- in
+-- your
+-- terminal
from asciitree import LeftAligned
from collections import OrderedDict as OD
tree = {
'asciitree': OD([
('sometimes',
{'you': {}}),
('just',
{'want': OD([
('to', {}),
('draw', {}),
])}),
('trees', {}),
('in', {
'your': {
'terminal': {}
}
})
])
}
tr = LeftAligned()
print(tr(tree))
Read the documentation at http://pythonhosted.org/asciitree
Fancier examples:
from collections import OrderedDict as OD
from copy import deepcopy
from asciitree import LeftAligned
from asciitree.drawing import BoxStyle, BOX_DOUBLE, BOX_BLANK
tr = LeftAligned()
# a basic tree
# OrderedDict is used in some places where node order is important, otherwise
# a normal dict is used for the sake of readabilitiy
tree = {
'asciitree': OD([
('sometimes',
{'you': {}}),
('just',
{'want': OD([
('to', {}),
('draw', {}),
])}),
('trees', {}),
('in', {
'your': {
'terminal': {}
}
})
])
}
print(tr(tree))
# construct a more complex tree by copying the tree and grafting it onto itself
tree2 = deepcopy(tree)
tree2['asciitree']['trees'] = deepcopy(tree2['asciitree'])
print(tr(tree2))
# use a box style
box_tr = LeftAligned(draw=BoxStyle(gfx=BOX_DOUBLE, horiz_len=1))
print(box_tr(tree))
# more airy
air_tr = LeftAligned(draw=BoxStyle(gfx=BOX_BLANK,
label_space=0,
label_format='[{}]',
indent=0))
print(air_tr(tree))
API¶
-
class
asciitree.LeftAligned(**kwargs)¶ Creates a renderer for a left-aligned tree.
Any attributes of the resulting class instances can be set using constructor arguments.
-
__call__(tree)¶ Render the tree into string suitable for console output.
Parameters: tree – A tree.
-
render(node)¶ Renders a node. This function is used internally, as it returns a list of lines. Use
__call__()instead.
-
-
class
asciitree.traversal.AttributeTraversal(**kwargs)¶ Attribute traversal.
Uses an attribute of a node as its list of children.
-
attribute= 'children'¶ Attribute to use.
-
-
class
asciitree.traversal.DictTraversal(**kwargs)¶ Traversal suitable for a dictionary. Keys are tree labels, all values must be dictionaries as well.
-
class
asciitree.traversal.Traversal(**kwargs)¶ Traversal method.
Used by the tree rendering functions like
LeftAligned.-
get_children(node)¶ Return a list of children of a node.
-
get_root(tree)¶ Return a node representing the tree root from the tree.
-
get_text(node)¶ Return the text associated with a node.
-
-
asciitree.drawing.BOX_ASCII= {'UP_AND_RIGHT': u'+', 'HORIZONTAL': u'-', 'VERTICAL': u'|', 'VERTICAL_AND_RIGHT': u'+'}¶ Unicode box-drawing glyphs, using only ascii
|+-characters.
-
asciitree.drawing.BOX_BLANK= {'UP_AND_RIGHT': u' ', 'HORIZONTAL': u' ', 'VERTICAL': u' ', 'VERTICAL_AND_RIGHT': u' '}¶ Unicode box-drawing glyphs, using only spaces.
-
asciitree.drawing.BOX_DOUBLE= {'UP_AND_RIGHT': u'\u255a', 'HORIZONTAL': u'\u2550', 'VERTICAL': u'\u2551', 'VERTICAL_AND_RIGHT': u'\u2560'}¶ Unicode box-drawing glyphs, double-line style
-
asciitree.drawing.BOX_HEAVY= {'UP_AND_RIGHT': u'\u2517', 'HORIZONTAL': u'\u2501', 'VERTICAL': u'\u2503', 'VERTICAL_AND_RIGHT': u'\u2523'}¶ Unicode box-drawing glyphs, heavy style
-
asciitree.drawing.BOX_LIGHT= {'UP_AND_RIGHT': u'\u2514', 'HORIZONTAL': u'\u2500', 'VERTICAL': u'\u2502', 'VERTICAL_AND_RIGHT': u'\u251c'}¶ Unicode box-drawing glyphs, light style
-
class
asciitree.drawing.BoxStyle(**kwargs)¶ A rendering style that uses box draw characters and a common layout.
-
gfx= {'UP_AND_RIGHT': u'+', 'HORIZONTAL': u'-', 'VERTICAL': u'|', 'VERTICAL_AND_RIGHT': u'+'}¶ Glyhps to use.
-
horiz_len= 2¶ Length of horizontal lines
-
indent= 1¶ Indent for subtrees
-
label_space= 1¶ Space between glyphs and label.
-
-
class
asciitree.drawing.Style(**kwargs)¶ Rendering style for trees.
-
child_head(label)¶ Render a node label into final output.
-
child_tail(line)¶ Render a node line that is not a label into final output.
-
label_format= u'{}'¶ Format for labels.
-
last_child_head(label)¶ Like
child_head()but only called for the last child.
-
last_child_tail(line)¶ Like
child_tail()but only called for the last child.
-
node_label(text)¶ Render a node text into a label.
-