Skip to content

Commit bb52d69

Browse files
add type hints for method arguments and return types
1 parent a4b7777 commit bb52d69

File tree

3 files changed

+238
-12
lines changed

3 files changed

+238
-12
lines changed

.vscode/settings.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"chat.editor.fontSize": 18,
3+
"chat.editor.lineHeight": 26,
4+
"inlineChat.fontSize": 18,
5+
"python.testing.pytestArgs": [
6+
"tests"
7+
],
8+
"python.testing.unittestEnabled": false,
9+
"python.testing.pytestEnabled": true
10+
}

mct_quantizers/logger.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ def __check_path_create_dir(log_path: str) -> None:
3838
Create a path if not exist. Otherwise, do nothing.
3939
4040
Args:
41-
log_path: Path to create or verify that exists.
41+
log_path (str): Path to create or verify that exists.
4242
"""
4343

4444
if not os.path.exists(log_path):
@@ -50,7 +50,7 @@ def set_logger_level(log_level: int = logging.INFO) -> None:
5050
Set log level to determine the logger verbosity.
5151
5252
Args:
53-
log_level: Level of verbosity to set for the logger.
53+
log_level (int): Level of verbosity to set for the logger.
5454
"""
5555

5656
logger = Logger.get_logger()
@@ -62,7 +62,7 @@ def set_handler_level(log_level: int = logging.INFO) -> None:
6262
Set log level for all handlers attached to the logger.
6363
6464
Args:
65-
log_level: Level of verbosity to set for the handlers.
65+
log_level (int): Level of verbosity to set for the handlers.
6666
"""
6767

6868
logger = Logger.get_logger()
@@ -99,7 +99,7 @@ def set_log_file(log_folder: Optional[str] = None) -> None:
9999
In that folder, it creates a log file according to the timestamp.
100100
101101
Args:
102-
log_folder: Folder path to hold the log file.
102+
log_folder (Optional[str]): Folder path to hold the log file.
103103
"""
104104

105105
logger = Logger.get_logger()
@@ -137,7 +137,7 @@ def critical(msg: str) -> None:
137137
Log a message at 'critical' severity and raise an exception.
138138
139139
Args:
140-
msg: Message to log.
140+
msg (str): Message to log.
141141
"""
142142
Logger.get_logger().critical(msg)
143143
raise Exception(msg)
@@ -148,7 +148,7 @@ def exception(msg: str) -> None:
148148
Log a message at 'exception' severity and raise an exception.
149149
150150
Args:
151-
msg: Message to log.
151+
msg (str): Message to log.
152152
"""
153153
Logger.get_logger().exception(msg)
154154
raise Exception(msg)
@@ -159,7 +159,7 @@ def debug(msg: str) -> None:
159159
Log a message at 'debug' severity.
160160
161161
Args:
162-
msg: Message to log.
162+
msg (str): Message to log.
163163
"""
164164
Logger.get_logger().debug(msg)
165165

@@ -169,7 +169,7 @@ def info(msg: str) -> None:
169169
Log a message at 'info' severity.
170170
171171
Args:
172-
msg: Message to log.
172+
msg (str): Message to log.
173173
"""
174174
Logger.get_logger().info(msg)
175175

@@ -179,7 +179,7 @@ def warning(msg: str) -> None:
179179
Log a message at 'warning' severity.
180180
181181
Args:
182-
msg: Message to log.
182+
msg (str): Message to log.
183183
"""
184184
Logger.get_logger().warning(msg)
185185

@@ -189,7 +189,7 @@ def error(msg: str) -> None:
189189
Log a message at 'error' severity and raise an exception.
190190
191191
Args:
192-
msg: Message to log.
192+
msg (str): Message to log.
193193
"""
194194
Logger.get_logger().error(msg)
195195

@@ -199,8 +199,8 @@ def set_log_folder(folder: str, level: int = logging.INFO) -> None:
199199
Set a directory path for saving a log file.
200200
201201
Args:
202-
folder: Folder path to save the log file.
203-
level: Level of verbosity to set to the logger and handlers.
202+
folder (str): Folder path to save the log file.
203+
level (int): Level of verbosity to set to the logger and handlers.
204204
205205
Note:
206206
This is a convenience function that calls multiple Logger methods

mct_quantizers/logger.py.bak

Lines changed: 216 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,216 @@
1+
# Copyright 2025 Sony Semiconductor Solutions, Inc. All rights reserved.
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
# ==============================================================================
15+
16+
17+
import logging
18+
import os
19+
from datetime import datetime
20+
from pathlib import Path
21+
from typing import Optional
22+
23+
LOGGER_NAME = 'MCT Quantizers'
24+
25+
26+
class Logger:
27+
# Logger has levels of verbosity.
28+
LOG_PATH = None
29+
DEBUG = logging.DEBUG
30+
INFO = logging.INFO
31+
WARNING = logging.WARNING
32+
ERROR = logging.ERROR
33+
CRITICAL = logging.CRITICAL
34+
35+
@staticmethod
36+
def __check_path_create_dir(log_path: str) -> None:
37+
"""
38+
Create a path if not exist. Otherwise, do nothing.
39+
40+
Args:
41+
log_path: Path to create or verify that exists.
42+
"""
43+
44+
if not os.path.exists(log_path):
45+
Path(log_path).mkdir(parents=True, exist_ok=True)
46+
47+
@staticmethod
48+
def set_logger_level(log_level: int = logging.INFO) -> None:
49+
"""
50+
Set log level to determine the logger verbosity.
51+
52+
Args:
53+
log_level: Level of verbosity to set for the logger.
54+
"""
55+
56+
logger = Logger.get_logger()
57+
logger.setLevel(log_level)
58+
59+
@staticmethod
60+
def set_handler_level(log_level: int = logging.INFO) -> None:
61+
"""
62+
Set log level for all handlers attached to the logger.
63+
64+
Args:
65+
log_level: Level of verbosity to set for the handlers.
66+
"""
67+
68+
logger = Logger.get_logger()
69+
for handler in logger.handlers:
70+
handler.setLevel(log_level)
71+
72+
@staticmethod
73+
def get_logger() -> logging.Logger:
74+
"""
75+
Returns: An instance of the logger.
76+
"""
77+
return logging.getLogger(LOGGER_NAME)
78+
79+
@staticmethod
80+
def set_stream_handler() -> None:
81+
"""
82+
Add a StreamHandler to output logs to the console (stdout).
83+
"""
84+
logger = Logger.get_logger()
85+
86+
# Check if StreamHandler already exists
87+
for handler in logger.handlers:
88+
if isinstance(handler, logging.StreamHandler):
89+
return
90+
91+
# Add StreamHandler
92+
sh = logging.StreamHandler()
93+
logger.addHandler(sh)
94+
95+
@staticmethod
96+
def set_log_file(log_folder: Optional[str] = None) -> None:
97+
"""
98+
Setting the logger log file path. The method gets the folder for the log file.
99+
In that folder, it creates a log file according to the timestamp.
100+
101+
Args:
102+
log_folder: Folder path to hold the log file.
103+
"""
104+
105+
logger = Logger.get_logger()
106+
107+
ts = datetime.now(tz=None).strftime("%d%m%Y_%H%M%S")
108+
109+
if log_folder is None:
110+
Logger.LOG_PATH = os.path.join(os.environ.get('LOG_PATH', os.getcwd()), f"logs_{ts}")
111+
else:
112+
Logger.LOG_PATH = os.path.join(log_folder, f"logs_{ts}")
113+
log_name = os.path.join(Logger.LOG_PATH, f'mct_log.log')
114+
115+
Logger.__check_path_create_dir(Logger.LOG_PATH)
116+
117+
fh = logging.FileHandler(log_name)
118+
logger.addHandler(fh)
119+
120+
print(f'log file is in {log_name}')
121+
122+
@staticmethod
123+
def shutdown() -> None:
124+
"""
125+
An orderly command to shutdown by flushing and closing all logging handlers.
126+
"""
127+
Logger.LOG_PATH = None
128+
logging.shutdown()
129+
130+
########################################
131+
# Delegating methods to wrapped logger
132+
########################################
133+
134+
@staticmethod
135+
def critical(msg: str) -> None:
136+
"""
137+
Log a message at 'critical' severity and raise an exception.
138+
139+
Args:
140+
msg: Message to log.
141+
"""
142+
Logger.get_logger().critical(msg)
143+
raise Exception(msg)
144+
145+
@staticmethod
146+
def exception(msg: str) -> None:
147+
"""
148+
Log a message at 'exception' severity and raise an exception.
149+
150+
Args:
151+
msg: Message to log.
152+
"""
153+
Logger.get_logger().exception(msg)
154+
raise Exception(msg)
155+
156+
@staticmethod
157+
def debug(msg: str) -> None:
158+
"""
159+
Log a message at 'debug' severity.
160+
161+
Args:
162+
msg: Message to log.
163+
"""
164+
Logger.get_logger().debug(msg)
165+
166+
@staticmethod
167+
def info(msg: str) -> None:
168+
"""
169+
Log a message at 'info' severity.
170+
171+
Args:
172+
msg: Message to log.
173+
"""
174+
Logger.get_logger().info(msg)
175+
176+
@staticmethod
177+
def warning(msg: str) -> None:
178+
"""
179+
Log a message at 'warning' severity.
180+
181+
Args:
182+
msg: Message to log.
183+
"""
184+
Logger.get_logger().warning(msg)
185+
186+
@staticmethod
187+
def error(msg: str) -> None:
188+
"""
189+
Log a message at 'error' severity and raise an exception.
190+
191+
Args:
192+
msg: Message to log.
193+
"""
194+
Logger.get_logger().error(msg)
195+
196+
197+
def set_log_folder(folder: str, level: int = logging.INFO) -> None:
198+
"""
199+
Set a directory path for saving a log file.
200+
201+
Args:
202+
folder: Folder path to save the log file.
203+
level: Level of verbosity to set to the logger and handlers.
204+
205+
Note:
206+
This is a convenience function that calls multiple Logger methods
207+
to set up logging.
208+
209+
Don't use Python's original logger.
210+
"""
211+
212+
Logger.set_stream_handler()
213+
Logger.set_log_file(folder)
214+
Logger.set_logger_level(level)
215+
Logger.set_handler_level(level)
216+

0 commit comments

Comments
 (0)