Synced repo using 'sync_with_huggingface' Github Action
Browse files- src/colorer.py +140 -0
src/colorer.py
ADDED
@@ -0,0 +1,140 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# https://stackoverflow.com/a/1336640
|
2 |
+
|
3 |
+
import logging
|
4 |
+
import sys, os, functools
|
5 |
+
from inspect import getframeinfo, stack
|
6 |
+
# now we patch Python code to add color support to logging.StreamHandler
|
7 |
+
def add_coloring_to_emit_windows(fn):
|
8 |
+
# add methods we need to the class
|
9 |
+
def _out_handle(self):
|
10 |
+
import ctypes
|
11 |
+
return ctypes.windll.kernel32.GetStdHandle(self.STD_OUTPUT_HANDLE)
|
12 |
+
out_handle = property(_out_handle)
|
13 |
+
|
14 |
+
def _set_color(self, code):
|
15 |
+
import ctypes
|
16 |
+
# Constants from the Windows API
|
17 |
+
self.STD_OUTPUT_HANDLE = -11
|
18 |
+
hdl = ctypes.windll.kernel32.GetStdHandle(self.STD_OUTPUT_HANDLE)
|
19 |
+
ctypes.windll.kernel32.SetConsoleTextAttribute(hdl, code)
|
20 |
+
|
21 |
+
setattr(logging.StreamHandler, '_set_color', _set_color)
|
22 |
+
|
23 |
+
def new(*args):
|
24 |
+
FOREGROUND_BLUE = 0x0001 # text color contains blue.
|
25 |
+
FOREGROUND_GREEN = 0x0002 # text color contains green.
|
26 |
+
FOREGROUND_RED = 0x0004 # text color contains red.
|
27 |
+
FOREGROUND_INTENSITY = 0x0008 # text color is intensified.
|
28 |
+
FOREGROUND_WHITE = FOREGROUND_BLUE|FOREGROUND_GREEN |FOREGROUND_RED
|
29 |
+
# winbase.h
|
30 |
+
STD_INPUT_HANDLE = -10
|
31 |
+
STD_OUTPUT_HANDLE = -11
|
32 |
+
STD_ERROR_HANDLE = -12
|
33 |
+
|
34 |
+
# wincon.h
|
35 |
+
FOREGROUND_BLACK = 0x0000
|
36 |
+
FOREGROUND_BLUE = 0x0001
|
37 |
+
FOREGROUND_GREEN = 0x0002
|
38 |
+
FOREGROUND_CYAN = 0x0003
|
39 |
+
FOREGROUND_RED = 0x0004
|
40 |
+
FOREGROUND_MAGENTA = 0x0005
|
41 |
+
FOREGROUND_YELLOW = 0x0006
|
42 |
+
FOREGROUND_GREY = 0x0007
|
43 |
+
FOREGROUND_INTENSITY = 0x0008 # foreground color is intensified.
|
44 |
+
|
45 |
+
BACKGROUND_BLACK = 0x0000
|
46 |
+
BACKGROUND_BLUE = 0x0010
|
47 |
+
BACKGROUND_GREEN = 0x0020
|
48 |
+
BACKGROUND_CYAN = 0x0030
|
49 |
+
BACKGROUND_RED = 0x0040
|
50 |
+
BACKGROUND_MAGENTA = 0x0050
|
51 |
+
BACKGROUND_YELLOW = 0x0060
|
52 |
+
BACKGROUND_GREY = 0x0070
|
53 |
+
BACKGROUND_INTENSITY = 0x0080 # background color is intensified.
|
54 |
+
|
55 |
+
levelno = args[1].levelno
|
56 |
+
if(levelno>=50):
|
57 |
+
color = BACKGROUND_YELLOW | FOREGROUND_RED | FOREGROUND_INTENSITY | BACKGROUND_INTENSITY
|
58 |
+
elif(levelno>=40):
|
59 |
+
color = FOREGROUND_RED | FOREGROUND_INTENSITY
|
60 |
+
elif(levelno>=30):
|
61 |
+
color = FOREGROUND_YELLOW | FOREGROUND_INTENSITY
|
62 |
+
elif(levelno>=20):
|
63 |
+
color = FOREGROUND_GREEN
|
64 |
+
elif(levelno>=10):
|
65 |
+
color = FOREGROUND_MAGENTA
|
66 |
+
else:
|
67 |
+
color = FOREGROUND_WHITE
|
68 |
+
args[0]._set_color(color)
|
69 |
+
|
70 |
+
ret = fn(*args)
|
71 |
+
args[0]._set_color( FOREGROUND_WHITE )
|
72 |
+
#print "after"
|
73 |
+
return ret
|
74 |
+
return new
|
75 |
+
|
76 |
+
def add_coloring_to_emit_ansi(fn):
|
77 |
+
# add methods we need to the class
|
78 |
+
def new(*args):
|
79 |
+
levelno = args[1].levelno
|
80 |
+
if(levelno>=50):
|
81 |
+
color = '\x1b[31m' # red
|
82 |
+
elif(levelno>=40):
|
83 |
+
color = '\x1b[31m' # red
|
84 |
+
elif(levelno>=30):
|
85 |
+
color = '\x1b[33m' # yellow
|
86 |
+
elif(levelno>=20):
|
87 |
+
color = '\x1b[32m' # green
|
88 |
+
elif(levelno>=10):
|
89 |
+
color = '\x1b[35m' # pink
|
90 |
+
else:
|
91 |
+
color = '\x1b[0m' # normal
|
92 |
+
args[1].msg = color + args[1].msg + '\x1b[0m' # normal
|
93 |
+
#print "after"
|
94 |
+
return fn(*args)
|
95 |
+
return new
|
96 |
+
|
97 |
+
import platform
|
98 |
+
if platform.system()=='Windows':
|
99 |
+
# Windows does not support ANSI escapes and we are using API calls to set the console color
|
100 |
+
logging.StreamHandler.emit = add_coloring_to_emit_windows(logging.StreamHandler.emit)
|
101 |
+
else:
|
102 |
+
# all non-Windows platforms are supporting ANSI escapes so we use them
|
103 |
+
logging.StreamHandler.emit = add_coloring_to_emit_ansi(logging.StreamHandler.emit)
|
104 |
+
#log = logging.getLogger()
|
105 |
+
#log.addFilter(log_filter())
|
106 |
+
#//hdlr = logging.StreamHandler()
|
107 |
+
#//hdlr.setFormatter(formatter())
|
108 |
+
|
109 |
+
def get_logger():
|
110 |
+
# Configure the logging module
|
111 |
+
# time = strftime("%Y-%m-%d_%H-%M-%S", localtime())
|
112 |
+
if not os.path.exists('logs'):
|
113 |
+
os.makedirs('logs')
|
114 |
+
|
115 |
+
logging.basicConfig(level=logging.INFO,
|
116 |
+
format="[%(asctime)s] %(levelname)s [%(filename)s.%(funcName)s:%(lineno)d] %(message)s",
|
117 |
+
datefmt='%d %b %Y %H:%M:%S',
|
118 |
+
handlers=[
|
119 |
+
logging.FileHandler(f"logs/{"warning"}.log"),
|
120 |
+
logging.StreamHandler()
|
121 |
+
])
|
122 |
+
|
123 |
+
# Capture warnings
|
124 |
+
logging.captureWarnings(True)
|
125 |
+
return logging.getLogger(__name__)
|
126 |
+
|
127 |
+
def start_end_log(_func=None):
|
128 |
+
def log_decorator(func):
|
129 |
+
@functools.wraps(func)
|
130 |
+
def func_wrapper(*args, **kwargs):
|
131 |
+
filename = os.path.basename(func.__code__.co_filename)
|
132 |
+
logger = get_logger()
|
133 |
+
logger.info(filename + ': begin ' + func.__name__, stacklevel=2)
|
134 |
+
output = func(*args, **kwargs)
|
135 |
+
logger.info(filename + ': end ' + func.__name__, stacklevel=2)
|
136 |
+
|
137 |
+
return output
|
138 |
+
|
139 |
+
return func_wrapper
|
140 |
+
return log_decorator(_func)
|