Skip to content

Commit 0280682

Browse files
Add InsLogger
Changes logging solution to INSLogger from the INS team.
1 parent 504feca commit 0280682

4 files changed

Lines changed: 156 additions & 0 deletions

File tree

INSLogger/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from .logger import Logger
2+
from .theme import Theme
3+
from .defaults_theme import ORIGIN_THEME, DEFAULT_THEME

INSLogger/defaults_theme.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
from .theme import Theme
2+
3+
ORIGIN_THEME = Theme({
4+
"GRAY": "\033[97m",
5+
"INFO": "",
6+
"WARN": "\033[93m",
7+
"ERROR": "\033[91m",
8+
"DEBUG": "\033[2m",
9+
"CLEAN": "\033[0m"
10+
})
11+
12+
DEFAULT_THEME = Theme({
13+
"GRAY": "\033[97m",
14+
"INFO": "\033[36m",
15+
"WARN": "\033[33m",
16+
"ERROR": "\033[31m",
17+
"DEBUG": "\033[34m",
18+
"CLEAN": "\033[0m"
19+
})

INSLogger/logger.py

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
from .theme import Theme
2+
from .defaults_theme import DEFAULT_THEME
3+
from typing import TypeVar
4+
import time
5+
6+
Logger = TypeVar("Logger")
7+
8+
9+
class Logger(object):
10+
def __init__(self, name: str = "main") -> None:
11+
self.name = name
12+
self.namespace_gray = False
13+
self.disable_time = True
14+
self.theme = DEFAULT_THEME
15+
16+
def config(
17+
self,
18+
namespace_gray: bool = None,
19+
disable_time: bool = None,
20+
theme: Theme = None,
21+
) -> None:
22+
if namespace_gray is not None:
23+
self.namespace_gray = namespace_gray
24+
if disable_time is not None:
25+
self.disable_time = disable_time
26+
if theme is not None:
27+
self.theme = theme
28+
29+
def __call__(self, name: str = "sub") -> Logger:
30+
new_logger = Logger(f"{self.name} -> {name}")
31+
new_logger.config(self.namespace_gray, self.disable_time, self.theme)
32+
return new_logger
33+
34+
def _log(self, level: str, messages: tuple) -> None:
35+
level = level.upper()
36+
messages = list(messages)
37+
38+
msgs = []
39+
for i in range(len(messages)):
40+
messages[i] = str(messages[i])
41+
i = " ".join(messages)
42+
for j in i.split("\n"):
43+
msgs.append(j)
44+
45+
for message in msgs:
46+
msg = ""
47+
48+
if self.namespace_gray:
49+
msg += self.theme("GRAY")
50+
else:
51+
msg += self.theme(level)
52+
msg += f"[{self.name}] "
53+
54+
if not self.disable_time:
55+
msg += f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] "
56+
57+
if self.namespace_gray:
58+
msg += self.theme(level)
59+
msg += f"[{level}] {message} {self.theme('CLEAN')}"
60+
61+
print(msg)
62+
63+
def info(self, *message) -> None:
64+
self._log("INFO", message)
65+
66+
def log(self, *message) -> None:
67+
self._log("INFO", message)
68+
69+
def warn(self, *message) -> None:
70+
self._log("WARN", message)
71+
72+
def warning(self, *message) -> None:
73+
self._log("WARN", message)
74+
75+
def error(self, *message) -> None:
76+
self._log("ERROR", message)
77+
78+
def debug(self, *message) -> None:
79+
self._log("DEBUG", message)
80+
81+
@staticmethod
82+
def enable() -> None: ...
83+
84+
@staticmethod
85+
def disable() -> None: ...

INSLogger/theme.py

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
from typing import overload, TypeVar
2+
3+
Theme = TypeVar("Theme")
4+
5+
class Theme:
6+
@overload
7+
def __init__(self) -> None: ...
8+
@overload
9+
def __init__(self, origin_theme: Theme) -> None: ...
10+
@overload
11+
def __init__(self, theme_dict: dict) -> None: ...
12+
13+
def __init__(self, a0 = None) -> None:
14+
if isinstance(a0, Theme):
15+
self.theme = a0.theme
16+
elif isinstance(a0, dict):
17+
self.theme = a0
18+
else:
19+
raise TypeError("a0 only can be Theme or dict!")
20+
21+
@overload
22+
def set_theme(self, theme_dict: dict) -> None: ...
23+
@overload
24+
def set_theme(self, theme_key: str, theme_data: str) -> None: ...
25+
26+
def set_theme(self, a0, a1 = None) -> None:
27+
if isinstance(a0, dict):
28+
for key in list(a0.keys()):
29+
self.theme[key] = a0[key]
30+
elif isinstance(a0, str):
31+
if a1 is None:
32+
raise TypeError("theme_data cannot be None!")
33+
if isinstance(a1, str):
34+
self.theme[a0] = a1
35+
else:
36+
raise TypeError("theme_data only can be str!")
37+
else:
38+
raise TypeError("a0 only can be dict or str!")
39+
40+
def get_theme(self, theme_key: str) -> str:
41+
if isinstance(theme_key, str):
42+
if self.theme.get(theme_key, None) is None:
43+
raise KeyError(f"cannot find theme key '{theme_key}'!")
44+
return self.theme[theme_key]
45+
else:
46+
raise TypeError("theme_key only can be str!")
47+
48+
def __call__(self, theme_key: str) -> str:
49+
return self.get_theme(theme_key)

0 commit comments

Comments
 (0)