11from __future__ import annotations
22import datetime
3-
4-
5- # TPrintColors contains the ANSI color codes and additional highlights for text styling.
6- class TPrintColors :
7- """
8- This class defines a set of ANSI escape sequences for text color formatting.
9- It includes basic colors, bright colors, background colors, and text styles.
10- """
11- # Basic Colors
12- WHITE = '\033 [97m'
13- BLACK = '\033 [30m'
14- RED = '\033 [91m'
15- GREEN = '\033 [92m'
16- YELLOW = '\033 [93m'
17- BLUE = '\033 [94m'
18- MAGENTA = '\033 [95m'
19- CYAN = '\033 [96m'
20- _RESET = '\033 [0m'
21-
22- # Bright Colors
23- BRIGHT_BLACK = '\033 [30;1m'
24- BRIGHT_RED = '\033 [91;1m'
25- BRIGHT_GREEN = '\033 [92;1m'
26- BRIGHT_YELLOW = '\033 [93;1m'
27- BRIGHT_BLUE = '\033 [94;1m'
28- BRIGHT_MAGENTA = '\033 [95;1m'
29- BRIGHT_CYAN = '\033 [96;1m'
30-
31- # Background Colors
32- BG_WHITE = '\033 [47m'
33- BG_BLACK = '\033 [40m'
34- BG_RED = '\033 [41m'
35- BG_GREEN = '\033 [42m'
36- BG_YELLOW = '\033 [43m'
37- BG_BLUE = '\033 [44m'
38- BG_MAGENTA = '\033 [45m'
39- BG_CYAN = '\033 [46m'
40-
41- # Text Styles
42- BOLD = '\033 [1m'
43- UNDERLINE = '\033 [4m'
44- REVERSED = '\033 [7m'
3+ from .colors import TPrintColors
454
465
476# TPrint class handles the printing and logging mechanism with customizable color schemes.
@@ -58,7 +17,7 @@ def __init__(self,
5817 debug_mode : bool = False ,
5918 log_file : str | None = None ,
6019 use_timestamps : bool = False ,
61- purge_old_logs : bool = False
20+ purge_old_logs : bool = False ,
6221 ):
6322 """
6423 Initializes the TPrint instance with optional custom color schemes and logging options.
@@ -81,9 +40,10 @@ def __init__(self,
8140 }
8241
8342 # Validate the color_scheme dictionary
84- unknown_keys = set (color_scheme ) - set (self .default_colors )
85- if unknown_keys :
86- raise ValueError (f"Unknown keys in color_scheme: { unknown_keys } " )
43+ if color_scheme is not None and isinstance (color_scheme , dict ):
44+ unknown_keys = set (color_scheme ) - set (self .default_colors )
45+ if unknown_keys :
46+ raise ValueError (f"Unknown keys in color_scheme: { unknown_keys } " )
8747
8848 # Use user-supplied scheme or merge it with defaults
8949 self .color_scheme = {** self .default_colors , ** (color_scheme or {})}
@@ -92,7 +52,6 @@ def __init__(self,
9252 self .use_timestamps = use_timestamps
9353 self .purge_old_logs = purge_old_logs
9454
95- # noinspection PyProtectedMember
9655 @staticmethod
9756 def __print_message (message , color : TPrintColors , symbol : str , timestamp : str = None , style = None ):
9857 """
@@ -109,9 +68,9 @@ def __print_message(message, color: TPrintColors, symbol: str, timestamp: str =
10968 styled_message = f"{ style } { message } " if style else message
11069 # Print the formatted message with the correct color and timestamp
11170 if timestamp :
112- print (f"{ color } [{ symbol } ][{ timestamp } ] { styled_message } { TPrintColors ._RESET } " )
71+ print (f"{ color } [{ symbol } ] [{ timestamp } ] { styled_message } { TPrintColors .RESET } " )
11372 else :
114- print (f"{ color } [{ symbol } ] { styled_message } { TPrintColors ._RESET } " )
73+ print (f"{ color } [{ symbol } ] { styled_message } { TPrintColors .RESET } " )
11574
11675 def __log_message (self , message , symbol : str , timestamp = None ):
11776 """
@@ -126,177 +85,168 @@ def __log_message(self, message, symbol: str, timestamp=None):
12685 if self .log_file :
12786 with open (self .log_file , 'a' , encoding = 'utf-8' ) as log :
12887 if timestamp :
129- log .write (f"[{ symbol } ][{ timestamp } ] { message } \n " )
88+ log .write (f"[{ symbol } ] [{ timestamp } ] { message } \n " )
13089 else :
13190 log .write (f"[{ symbol } ] { message } \n " )
13291
13392 # Log levels
134- def info (self , message , log : bool = None , style : TPrintColors = None ):
93+ def info (self , message , log_to_file : bool = None , style : TPrintColors = None ):
13594 """
13695 Logs an informational message.
13796
13897 Args:
13998 message (str): The message to log.
140- log (bool): Whether to log the message to a file (default: None).
99+ log_to_file (bool): Whether to log the message to a file (default: None).
141100 style (str): The style to apply to the message (default: None).
142101 """
143- if log is None :
144- log = self .log_file
102+ if log_to_file is None :
103+ log_to_file = self .log_file
145104 timestamp = datetime .datetime .now ().strftime ('%Y-%m-%d %H:%M:%S' ) if self .use_timestamps else None
146105 self .__print_message (message , self .color_scheme ['info' ], "*" , timestamp , style )
147- if log :
106+ if log_to_file :
148107 self .__log_message (message , "*" , timestamp )
149108
150- def warning (self , message , log : bool = False , style : TPrintColors = None ):
109+ def warning (self , message , log_to_file : bool = None , style : TPrintColors = None ):
151110 """
152111 Logs a warning message.
153112
154113 Args:
155114 message (str): The message to log.
156- log (bool): Whether to log the message to a file (default: False).
115+ log_to_file (bool): Whether to log the message to a file (default: False).
157116 style (str): The style to apply to the message (default: None).
158117 """
159- if log is None :
160- log = self .log_file
118+ if log_to_file is None :
119+ log_to_file = self .log_file
161120 timestamp = datetime .datetime .now ().strftime ('%Y-%m-%d %H:%M:%S' ) if self .use_timestamps else None
162121 self .__print_message (message , self .color_scheme ['warning' ], "!" , timestamp , style )
163- if log :
122+ if log_to_file :
164123 self .__log_message (message , "!" , timestamp )
165124
166- def error (self , message , log : bool = False , style : TPrintColors = None ):
125+ def error (self , message , log_to_file : bool = None , style : TPrintColors = None ):
167126 """
168127 Logs an error message.
169128
170129 Args:
171130 message (str): The message to log.
172- log (bool): Whether to log the message to a file (default: False).
131+ log_to_file (bool): Whether to log the message to a file (default: False).
173132 style (str): The style to apply to the message (default: None).
174133 """
175- if log is None :
176- log = self .log_file
134+ if log_to_file is None :
135+ log_to_file = self .log_file
177136 timestamp = datetime .datetime .now ().strftime ('%Y-%m-%d %H:%M:%S' ) if self .use_timestamps else None
178137 self .__print_message (message , self .color_scheme ['error' ], "x" , timestamp , style )
179- if log :
138+ if log_to_file :
180139 self .__log_message (message , "x" , timestamp )
181140
182- def debug (self , message , log : bool = False , style : TPrintColors = None ):
141+ def debug (self , message , log_to_file : bool = None , style : TPrintColors = None ):
183142 """
184143 Logs a debug message if debug mode is enabled.
185144
186145 Args:
187146 message (str): The message to log.
188- log (bool): Whether to log the message to a file (default: False).
147+ log_to_file (bool): Whether to log the message to a file (default: False).
189148 style (str): The style to apply to the message (default: None).
190149 """
191- if log is None :
192- log = self .log_file
150+ if log_to_file is None :
151+ log_to_file = self .log_file
193152 if self .debug_mode : # Only print debug messages if debug mode is enabled
194153 timestamp = datetime .datetime .now ().strftime ('%Y-%m-%d %H:%M:%S' ) if self .use_timestamps else None
195154 self .__print_message (message , self .color_scheme ['debug' ], "-" , timestamp , style )
196- if log :
155+ if log_to_file :
197156 self .__log_message (message , "-" , timestamp )
198157
199- def critical (self , message , log : bool = False , style : TPrintColors = None ):
158+ def critical (self , message , log_to_file : bool = None , style : TPrintColors = None ):
200159 """
201160 Logs a critical message.
202161
203162 Args:
204163 message (str): The message to log.
205- log (bool): Whether to log the message to a file (default: False).
164+ log_to_file (bool): Whether to log the message to a file (default: False).
206165 style (str): The style to apply to the message (default: None).
207166 """
208- if log is None :
209- log = self .log_file
167+ if log_to_file is None :
168+ log_to_file = self .log_file
210169 timestamp = datetime .datetime .now ().strftime ('%Y-%m-%d %H:%M:%S' ) if self .use_timestamps else None
211170 self .__print_message (message , self .color_scheme ['critical' ], "x" , timestamp , style )
212- if log :
171+ if log_to_file :
213172 self .__log_message (message , "x" , timestamp )
214173
215- def success (self , message , log : bool = False , style : TPrintColors = None ):
174+ def success (self , message , log_to_file : bool = None , style : TPrintColors = None ):
216175 """
217176 Logs a success message.
218177
219178 Args:
220179 message (str): The message to log.
221- log (bool): Whether to log the message to a file (default: False).
180+ log_to_file (bool): Whether to log the message to a file (default: False).
222181 style (str): The style to apply to the message (default: None).
223182 """
224- if log is None :
225- log = self .log_file
183+ if log_to_file is None :
184+ log_to_file = self .log_file
226185 timestamp = datetime .datetime .now ().strftime ('%Y-%m-%d %H:%M:%S' ) if self .use_timestamps else None
227186 self .__print_message (message , self .color_scheme ['success' ], "✓" , timestamp , style )
228- if log :
187+ if log_to_file :
229188 self .__log_message (message , "✓" , timestamp )
230189
231- def input (self , message ) -> str :
190+ def input (self , message , log_to_file : bool = None ) -> str :
232191 """
233192 Prompts the user for input with a colored message.
234193
235194 Args:
236195 message (str): The message to display when prompting for input.
196+ log_to_file (bool): Whether to log the message to a file (default: False).
237197
238198 Returns:
239199 str: The user's input.
240200 """
241- return input (f"{ self .color_scheme ['input' ]} [?] { message } " )
201+ answer = input (f"{ self .color_scheme ['input' ]} [?] { message } " )
202+ if log_to_file is None :
203+ log_to_file = self .log_file
242204
243- # Setting dynamic updates
244- def set_color_scheme ( self , color_scheme : dict [ str , str ]):
245- """
246- Dynamically updates the color scheme.
205+ if log_to_file :
206+ timestamp = datetime . datetime . now (). strftime ( '%Y-%m-%d %H:%M:%S' ) if self . use_timestamps else None
207+ self . __log_message ( message , "?" , timestamp )
208+ self . __log_message ( answer , ">" , timestamp )
247209
248- Args:
249- color_scheme (dict): The new color scheme.
250- """
251- # Allows for dynamic color updates
252- self .color_scheme .update (color_scheme )
253- unknown_keys = set (color_scheme ) - set (self .default_colors )
254- if unknown_keys :
255- raise ValueError (f"Unknown keys in color_scheme: { unknown_keys } " )
210+ return answer
256211
257- def set_debug_mode (self , debug_mode : bool ):
212+ # Setting dynamic updates
213+ def formatter (self ,
214+ color_scheme : dict [str , str ] = None ,
215+ debug_mode : bool = None ,
216+ use_timestamps : bool = None ,
217+ log_file : str | None = None ,
218+ purge_old_logs : bool = None
219+ ):
258220 """
259- Enables or disables debug mode dynamically.
221+ Modify previously set settings dynamically.
260222
261223 Args:
262224 debug_mode (bool): The new debug mode flag.
263- """
264- self .debug_mode = debug_mode
265-
266- def set_timestamp_usage (self , use_timestamps : bool ):
267- """
268- Enables or disables the usage of timestamps dynamically.
269-
270- Args:
225+ color_scheme (dict): The new color scheme.
271226 use_timestamps (bool): The new timestamp flag.
272- """
273- self .use_timestamps = use_timestamps
274-
275- def set_log_file (self , log_file : str | None ):
276- """
277- Dynamically changes the log file name or disables logging.
278-
279- Args:
280227 log_file (str | None): The new log file path or None to disable logging.
281- """
282- self .log_file = log_file
228+ purge_old_logs (bool): The new purge flag.
283229
284- def set_purge_old_logs (self , purge_old_logs : bool ):
285230 """
286- Enables or disables old log purging dynamically.
231+ # Allows for dynamic color updates
232+ if color_scheme :
233+ self .color_scheme .update (color_scheme )
234+ unknown_keys = set (color_scheme ) - set (self .default_colors )
235+ if unknown_keys :
236+ raise ValueError (f"Unknown keys in color_scheme: { unknown_keys } " )
287237
288- Args:
289- purge_old_logs (bool): The new purge flag.
290- """
291- self .purge_old_logs = purge_old_logs
238+ self . use_timestamps = use_timestamps if use_timestamps is not None else self . use_timestamps
239+ self . log_file = log_file if log_file is not None else self . log_file
240+ self . purge_old_logs = purge_old_logs if purge_old_logs is not None else self . purge_old_logs
241+ self .debug_mode = debug_mode if debug_mode is not None else self . debug_mode
292242
293243
294- # noinspection PyProtectedMember
295- def separator (title ):
244+ def separator (title , color : TPrintColors = TPrintColors .MAGENTA ):
296245 """
297- Prints a separator with a title in bold and magenta .
246+ Prints a separator with a title in bold and specified color .
298247
299248 Args:
300249 title (str): The title to display in the separator.
250+ color (TPrintColors): The color to use - defaults to magenta.
301251 """
302- print (f"{ TPrintColors .BOLD } { TPrintColors . MAGENTA } --- { title } ---{ TPrintColors ._RESET } " )
252+ print (f"{ TPrintColors .BOLD } { color } --- { title } ---{ TPrintColors .RESET } " )
0 commit comments