Invicto69 commited on
Commit
bf23b7e
·
verified ·
1 Parent(s): a047e89

Synced repo using 'sync_with_huggingface' Github Action

Browse files
Files changed (1) hide show
  1. 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)