degal/log.py
changeset 71 98da2964c95c
parent 70 67dd32adf159
child 72 168a2d065f17
equal deleted inserted replaced
70:67dd32adf159 71:98da2964c95c
     1 import logging, sys
       
     2 
       
     3 """
       
     4     Fancy tree-structured logging output
       
     5 """
       
     6 
       
     7 log_level = logging.INFO
       
     8 stack = []
       
     9 
       
    10 class g :
       
    11     out_depth = 0
       
    12     node = None
       
    13 
       
    14 def title (title, *args) :
       
    15     stack.append(title)
       
    16 
       
    17     print "%s - %s" % (" "*g.out_depth, title % args)
       
    18 
       
    19     g.out_depth += 1
       
    20 
       
    21 def down (dir_name, *args) :
       
    22     stack.append(dir_name % args)
       
    23     g.node = None
       
    24 
       
    25 def next (fname, *args) :
       
    26     g.node = fname % args
       
    27 
       
    28 def up () :
       
    29     stack.pop(-1)
       
    30     g.node = None
       
    31     g.out_depth = min(g.out_depth, len(stack))
       
    32 
       
    33 def done () :
       
    34     print "done"
       
    35 
       
    36 def log (level, message, *args, **kwargs) :
       
    37     wait = kwargs.get("wait", False)
       
    38 
       
    39     if level >= log_level :
       
    40         if g.out_depth != len(stack) :
       
    41             for segment in stack[g.out_depth:] :
       
    42                 print "%sd %s" % (" "*g.out_depth, segment)
       
    43                 g.out_depth += 1
       
    44 
       
    45         if g.node :
       
    46             print "%sf %s" % (" "*g.out_depth, g.node)
       
    47             g.node = None
       
    48         
       
    49         if wait :
       
    50             print "%s - %s..." % (" "*g.out_depth, message % args),
       
    51             sys.stdout.flush()
       
    52         else :
       
    53             print "%s - %s" % (" "*g.out_depth, message % args)
       
    54 
       
    55 def _level (level) :
       
    56     def _log_func (message, *args, **kwargs) :
       
    57         log(level, message, *args, **kwargs)
       
    58     
       
    59     return _log_func
       
    60 
       
    61 debug       = _level(logging.DEBUG)
       
    62 info        = _level(logging.INFO)
       
    63 warning     = _level(logging.WARNING)
       
    64 error       = _level(logging.ERROR)
       
    65