~voluntatefaber/beat-box/bug952329

« back to all changes in this revision

Viewing changes to .waf-1.6.2-ad4cc42bd7d347f7e283789e711b993f/waflib/Logs.py

  • Committer: Scott Ringwelski
  • Date: 2011-02-10 21:30:53 UTC
  • Revision ID: sgringwe@mtu.edu-20110210213053-d3c7mnexeref3cwj
sexy icons, sexy waf

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#! /usr/bin/env python
 
2
# encoding: utf-8
 
3
# WARNING! All changes made to this file will be lost!
 
4
 
 
5
import os,re,logging,traceback,sys
 
6
try:
 
7
        if'NOCOLOR'not in os.environ:
 
8
                import waflib.ansiterm
 
9
except:
 
10
        pass
 
11
LOG_FORMAT="%(asctime)s %(c1)s%(zone)s%(c2)s %(message)s"
 
12
HOUR_FORMAT="%H:%M:%S"
 
13
zones=''
 
14
verbose=0
 
15
colors_lst={'USE':True,'BOLD':'\x1b[01;1m','RED':'\x1b[01;31m','GREEN':'\x1b[32m','YELLOW':'\x1b[33m','PINK':'\x1b[35m','BLUE':'\x1b[01;34m','CYAN':'\x1b[36m','NORMAL':'\x1b[0m','cursor_on':'\x1b[?25h','cursor_off':'\x1b[?25l',}
 
16
got_tty=not os.environ.get('TERM','dumb')in['dumb','emacs']
 
17
if got_tty:
 
18
        try:
 
19
                got_tty=sys.stderr.isatty()
 
20
        except AttributeError:
 
21
                got_tty=False
 
22
if not got_tty or'NOCOLOR'in os.environ:
 
23
        colors_lst['USE']=False
 
24
def get_term_cols():
 
25
        return 80
 
26
try:
 
27
        import struct,fcntl,termios
 
28
except ImportError:
 
29
        pass
 
30
else:
 
31
        if got_tty:
 
32
                def get_term_cols_real():
 
33
                        dummy_lines,cols=struct.unpack("HHHH",fcntl.ioctl(sys.stderr.fileno(),termios.TIOCGWINSZ,struct.pack("HHHH",0,0,0,0)))[:2]
 
34
                        return cols
 
35
                try:
 
36
                        get_term_cols_real()
 
37
                except:
 
38
                        pass
 
39
                else:
 
40
                        get_term_cols=get_term_cols_real
 
41
get_term_cols.__doc__="""
 
42
        Get the console width in characters.
 
43
 
 
44
        :return: the number of characters per line
 
45
        :rtype: int
 
46
        """
 
47
def get_color(cl):
 
48
        if not colors_lst['USE']:return''
 
49
        return colors_lst.get(cl,'')
 
50
class color_dict(object):
 
51
        def __getattr__(self,a):
 
52
                return get_color(a)
 
53
        def __call__(self,a):
 
54
                return get_color(a)
 
55
colors=color_dict()
 
56
re_log=re.compile(r'(\w+): (.*)',re.M)
 
57
class log_filter(logging.Filter):
 
58
        def __init__(self,name=None):
 
59
                pass
 
60
        def filter(self,rec):
 
61
                rec.c1=colors.PINK
 
62
                rec.c2=colors.NORMAL
 
63
                rec.zone=rec.module
 
64
                if rec.levelno>=logging.INFO:
 
65
                        if rec.levelno>=logging.ERROR:
 
66
                                rec.c1=colors.RED
 
67
                        elif rec.levelno>=logging.WARNING:
 
68
                                rec.c1=colors.YELLOW
 
69
                        else:
 
70
                                rec.c1=colors.GREEN
 
71
                        return True
 
72
                zone=''
 
73
                m=re_log.match(rec.msg)
 
74
                if m:
 
75
                        zone=rec.zone=m.group(1)
 
76
                        rec.msg=m.group(2)
 
77
                if zones:
 
78
                        return getattr(rec,'zone','')in zones or'*'in zones
 
79
                elif not verbose>2:
 
80
                        return False
 
81
                return True
 
82
class formatter(logging.Formatter):
 
83
        def __init__(self):
 
84
                logging.Formatter.__init__(self,LOG_FORMAT,HOUR_FORMAT)
 
85
        def format(self,rec):
 
86
                if rec.levelno>=logging.WARNING or rec.levelno==logging.INFO:
 
87
                        try:
 
88
                                return'%s%s%s'%(rec.c1,rec.msg,rec.c2)
 
89
                        except:
 
90
                                return rec.c1+rec.msg+rec.c2
 
91
                return logging.Formatter.format(self,rec)
 
92
log=None
 
93
def debug(*k,**kw):
 
94
        if verbose:
 
95
                k=list(k)
 
96
                k[0]=k[0].replace('\n',' ')
 
97
                global log
 
98
                log.debug(*k,**kw)
 
99
def error(*k,**kw):
 
100
        global log
 
101
        log.error(*k,**kw)
 
102
        if verbose>2:
 
103
                st=traceback.extract_stack()
 
104
                if st:
 
105
                        st=st[:-1]
 
106
                        buf=[]
 
107
                        for filename,lineno,name,line in st:
 
108
                                buf.append('  File "%s", line %d, in %s'%(filename,lineno,name))
 
109
                                if line:
 
110
                                        buf.append('    %s'%line.strip())
 
111
                        if buf:log.error("\n".join(buf))
 
112
def warn(*k,**kw):
 
113
        global log
 
114
        log.warn(*k,**kw)
 
115
def info(*k,**kw):
 
116
        global log
 
117
        log.info(*k,**kw)
 
118
def init_log():
 
119
        global log
 
120
        log=logging.getLogger('waflib')
 
121
        log.handlers=[]
 
122
        log.filters=[]
 
123
        hdlr=logging.StreamHandler()
 
124
        hdlr.setFormatter(formatter())
 
125
        log.addHandler(hdlr)
 
126
        log.addFilter(log_filter())
 
127
        log.setLevel(logging.DEBUG)
 
128
def make_logger(path,name):
 
129
        logger=logging.getLogger(name)
 
130
        hdlr=logging.FileHandler(path,'w')
 
131
        formatter=logging.Formatter('%(message)s')
 
132
        hdlr.setFormatter(formatter)
 
133
        logger.addHandler(hdlr)
 
134
        logger.setLevel(logging.DEBUG)
 
135
        return logger
 
136
def make_mem_logger(name,to_log,size=10000):
 
137
        from logging.handlers import MemoryHandler
 
138
        logger=logging.getLogger(name)
 
139
        hdlr=MemoryHandler(size,target=to_log)
 
140
        formatter=logging.Formatter('%(message)s')
 
141
        hdlr.setFormatter(formatter)
 
142
        logger.addHandler(hdlr)
 
143
        logger.memhandler=hdlr
 
144
        logger.setLevel(logging.DEBUG)
 
145
        return logger
 
146
def pprint(col,str,label='',sep='\n'):
 
147
        sys.stderr.write("%s%s%s %s%s"%(colors(col),str,colors.NORMAL,label,sep))