112 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			112 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# Colored log
 | 
						|
import sys
 | 
						|
from distutils.log import *  # noqa: F403
 | 
						|
from distutils.log import Log as old_Log
 | 
						|
from distutils.log import _global_log
 | 
						|
 | 
						|
from numpy.distutils.misc_util import (red_text, default_text, cyan_text,
 | 
						|
        green_text, is_sequence, is_string)
 | 
						|
 | 
						|
 | 
						|
def _fix_args(args,flag=1):
 | 
						|
    if is_string(args):
 | 
						|
        return args.replace('%', '%%')
 | 
						|
    if flag and is_sequence(args):
 | 
						|
        return tuple([_fix_args(a, flag=0) for a in args])
 | 
						|
    return args
 | 
						|
 | 
						|
 | 
						|
class Log(old_Log):
 | 
						|
    def _log(self, level, msg, args):
 | 
						|
        if level >= self.threshold:
 | 
						|
            if args:
 | 
						|
                msg = msg % _fix_args(args)
 | 
						|
            if 0:
 | 
						|
                if msg.startswith('copying ') and msg.find(' -> ') != -1:
 | 
						|
                    return
 | 
						|
                if msg.startswith('byte-compiling '):
 | 
						|
                    return
 | 
						|
            print(_global_color_map[level](msg))
 | 
						|
            sys.stdout.flush()
 | 
						|
 | 
						|
    def good(self, msg, *args):
 | 
						|
        """
 | 
						|
        If we log WARN messages, log this message as a 'nice' anti-warn
 | 
						|
        message.
 | 
						|
 | 
						|
        """
 | 
						|
        if WARN >= self.threshold:
 | 
						|
            if args:
 | 
						|
                print(green_text(msg % _fix_args(args)))
 | 
						|
            else:
 | 
						|
                print(green_text(msg))
 | 
						|
            sys.stdout.flush()
 | 
						|
 | 
						|
 | 
						|
_global_log.__class__ = Log
 | 
						|
 | 
						|
good = _global_log.good
 | 
						|
 | 
						|
def set_threshold(level, force=False):
 | 
						|
    prev_level = _global_log.threshold
 | 
						|
    if prev_level > DEBUG or force:
 | 
						|
        # If we're running at DEBUG, don't change the threshold, as there's
 | 
						|
        # likely a good reason why we're running at this level.
 | 
						|
        _global_log.threshold = level
 | 
						|
        if level <= DEBUG:
 | 
						|
            info('set_threshold: setting threshold to DEBUG level,'
 | 
						|
                    ' it can be changed only with force argument')
 | 
						|
    else:
 | 
						|
        info('set_threshold: not changing threshold from DEBUG level'
 | 
						|
                ' %s to %s' % (prev_level, level))
 | 
						|
    return prev_level
 | 
						|
 | 
						|
def get_threshold():
 | 
						|
	return _global_log.threshold
 | 
						|
 | 
						|
def set_verbosity(v, force=False):
 | 
						|
    prev_level = _global_log.threshold
 | 
						|
    if v < 0:
 | 
						|
        set_threshold(ERROR, force)
 | 
						|
    elif v == 0:
 | 
						|
        set_threshold(WARN, force)
 | 
						|
    elif v == 1:
 | 
						|
        set_threshold(INFO, force)
 | 
						|
    elif v >= 2:
 | 
						|
        set_threshold(DEBUG, force)
 | 
						|
    return {FATAL:-2,ERROR:-1,WARN:0,INFO:1,DEBUG:2}.get(prev_level, 1)
 | 
						|
 | 
						|
 | 
						|
_global_color_map = {
 | 
						|
    DEBUG:cyan_text,
 | 
						|
    INFO:default_text,
 | 
						|
    WARN:red_text,
 | 
						|
    ERROR:red_text,
 | 
						|
    FATAL:red_text
 | 
						|
}
 | 
						|
 | 
						|
# don't use INFO,.. flags in set_verbosity, these flags are for set_threshold.
 | 
						|
set_verbosity(0, force=True)
 | 
						|
 | 
						|
 | 
						|
_error = error
 | 
						|
_warn = warn
 | 
						|
_info = info
 | 
						|
_debug = debug
 | 
						|
 | 
						|
 | 
						|
def error(msg, *a, **kw):
 | 
						|
    _error(f"ERROR: {msg}", *a, **kw)
 | 
						|
 | 
						|
 | 
						|
def warn(msg, *a, **kw):
 | 
						|
    _warn(f"WARN: {msg}", *a, **kw)
 | 
						|
 | 
						|
 | 
						|
def info(msg, *a, **kw):
 | 
						|
    _info(f"INFO: {msg}", *a, **kw)
 | 
						|
 | 
						|
 | 
						|
def debug(msg, *a, **kw):
 | 
						|
    _debug(f"DEBUG: {msg}", *a, **kw)
 |