import logging, sys
"""
Fancy tree-structured logging output
"""
log_level = logging.INFO
stack = []
class g :
out_depth = 0
node = None
def title (title, *args) :
stack.append(title)
print "%s - %s" % (" "*g.out_depth, title % args)
g.out_depth += 1
def down (dir_name, *args) :
stack.append(dir_name % args)
g.node = None
def next (fname, *args) :
g.node = fname % args
def up () :
stack.pop(-1)
g.node = None
g.out_depth = min(g.out_depth, len(stack))
def done () :
print "done"
def log (level, message, *args, **kwargs) :
wait = kwargs.get("wait", False)
if level >= log_level :
if g.out_depth != len(stack) :
for segment in stack[g.out_depth:] :
print "%sd %s" % (" "*g.out_depth, segment)
g.out_depth += 1
if g.node :
print "%sf %s" % (" "*g.out_depth, g.node)
g.node = None
if wait :
print "%s - %s..." % (" "*g.out_depth, message % args),
sys.stdout.flush()
else :
print "%s - %s" % (" "*g.out_depth, message % args)
def _level (level) :
def _log_func (message, *args, **kwargs) :
log(level, message, *args, **kwargs)
return _log_func
debug = _level(logging.DEBUG)
info = _level(logging.INFO)
warning = _level(logging.WARNING)
error = _level(logging.ERROR)