tree_output

Python library to simplify building of tree output with command-line interfaces.


License
MIT
Install
pip install tree_output==0.1.4

Documentation

tree_output

Build Status

Python library to simplify building of tree output with command-line interfaces.

Supported output format options are:

  • json
  • ascii
  • ansi
  • null

examples

tree_output = HierarchicalOutput.factory('ansi')
import colorama

tree_output.emit('foo')
tree_output.add_level()
tree_output.emit('foO')
tree_output.add_level()
tree_output.emit('bar')

tree_output.add_level()
for num in range(10):
    tree_output.emit(num)
tree_output.emit(10, closed=True)
tree_output.remove_level()

tree_output.emit('baz', closed=True)
tree_output.emit('foo2')

this will draw a colorful ANSI output like this

.
├── foo
│   ├── foO
│   │   ├── bar
│   │   │   ├── 0
│   │   │   ├── 1
│   │   │   ├── 2
│   │   │   ├── 3
│   │   │   ├── 4
│   │   │   ├── 5
│   │   │   ├── 6
│   │   │   ├── 7
│   │   │   ├── 8
│   │   │   ├── 9
│   │   │   └── 10
│   └── baz
├── foo2

logging

Another option is to integrate with logging and pass hierarchical meta instructions via optional extra argument, e.g.

houtput = HierarchicalOutput.factory(format='json')
#houtput = HierarchicalOutput.factory(format='ansi')
handler = HierarchicalOutputHandler(houtput=houtput)
logger = logging.getLogger('foo')
logging.root.addHandler(handler)
# Emission.
logger.info('foo')
logger.info('bar', extra={'add_hlevel': True})
logger.info('foo2')
logger.info('bar', extra={'add_hlevel': True})
logger.info('foo2')
logger.info('Numbers', extra={'add_hlevel': True})
for num in range(10):
    logger.warn(num)
logger.warn('end of numbers', extra={'hclosed': True})
logger.debug('level up', extra={'remove_hclosed': True})

produces

["foo", [
    "bar", "foo2", ["
        bar", "foo2", [
            "Numbers", 
            "0", 
            "1", 
            "2", 
            "3", 
            "4", 
            "5", 
            "6", 
            "7", 
            "8", 
            "9", 
            "end of numbers"
        ], 
    "level up"]
    ]
]

tests

For tests we use nose, i.e. usage would be:

cd tests && nosetests