logger-36 2025.5__py3-none-any.whl → 2025.7__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
logger_36/type/logger.py CHANGED
@@ -7,6 +7,7 @@ SEE COPYRIGHT NOTICE BELOW
7
7
  import dataclasses as d
8
8
  import logging as l
9
9
  import sys as s
10
+ import textwrap as text
10
11
  import traceback as tcbk
11
12
  import types as t
12
13
  import typing as h
@@ -24,36 +25,41 @@ from logger_36.config.message import (
24
25
  TIME_FORMAT,
25
26
  )
26
27
  from logger_36.constant.generic import NOT_PASSED
27
- from logger_36.constant.handler import ANONYMOUS
28
+ from logger_36.constant.handler import ANONYMOUS, HANDLER_KINDS, handler_codes_h
28
29
  from logger_36.constant.issue import ISSUE_LEVEL_SEPARATOR, ORDER, order_h
29
30
  from logger_36.constant.logger import (
30
31
  LOGGER_NAME,
31
32
  WARNING_LOGGER_NAME,
32
33
  WARNING_TYPE_COMPILED_PATTERN,
33
- logger_handle_h,
34
34
  )
35
35
  from logger_36.constant.memory import UNKNOWN_MEMORY_USAGE
36
- from logger_36.constant.message import TIME_LENGTH_m_1, expected_op_h
36
+ from logger_36.constant.message import LINE_INDENT, TIME_LENGTH_m_1, expected_op_h
37
+ from logger_36.constant.path import PROJECT_FILE_RELATIVE
37
38
  from logger_36.constant.record import (
38
39
  HIDE_WHERE_ATTR,
39
40
  SHOW_W_RULE_ATTR,
40
41
  STORE_MEMORY_ATTR,
41
42
  )
42
43
  from logger_36.exception import OverrideExceptionFormat
43
- from logger_36.handler import AddRichConsoleHandler
44
+ from logger_36.handler import AddConsoleHandler, AddFileHandler, AddRichConsoleHandler
44
45
  from logger_36.task.format.message import MessageWithActualExpected
46
+ from logger_36.task.format.rule import RuleAsText
45
47
  from logger_36.task.measure.chronos import ElapsedTime
46
48
  from logger_36.task.measure.memory import CurrentUsage as CurrentMemoryUsage
47
49
  from logger_36.type.issue import NewIssue, issue_t
48
50
 
49
- logger_base_t = l.Logger
51
+ base_t = l.Logger
52
+
53
+ logger_handle_raw_h = h.Callable[[l.LogRecord], None]
54
+ logger_handle_with_self_h = h.Callable[[l.Logger, l.LogRecord], None]
55
+ logger_handle_h = logger_handle_raw_h | logger_handle_with_self_h
50
56
 
51
57
  _DATE_TIME_ORIGIN = date_time_t.fromtimestamp(1970, None)
52
58
  _DATE_ORIGIN = _DATE_TIME_ORIGIN.date()
53
59
 
54
60
 
55
61
  @d.dataclass(slots=True, repr=False, eq=False)
56
- class logger_t(logger_base_t):
62
+ class logger_t(base_t):
57
63
  """
58
64
  intercepted_wrn_handle: When warning interception is on, this stores the original
59
65
  "handle" method of the Python warning logger.
@@ -81,88 +87,20 @@ class logger_t(logger_base_t):
81
87
  init=False, default_factory=dict
82
88
  )
83
89
 
84
- def __post_init__(
85
- self, name_: str, level_: int, activate_wrn_interceptions: bool
86
- ) -> None:
87
- """"""
88
- logger_base_t.__init__(self, name_)
89
- self.setLevel(level_)
90
- self.propagate = False # Part of logger_base_t.
91
-
92
- for level in l.getLevelNamesMapping().values():
93
- self.events[level] = 0
94
-
95
- if activate_wrn_interceptions:
96
- self._ActivateWarningInterceptions()
97
- if self.exit_on_error:
98
- self.exit_on_critical = True
99
-
100
- def MakeRich(self, *, alternating_lines: int = 2) -> None:
101
- """"""
102
- OverrideExceptionFormat()
103
- AddRichConsoleHandler(self, alternating_lines=alternating_lines)
104
-
105
- def ResetEventCounts(self) -> None:
106
- """"""
107
- for level in self.events:
108
- self.events[level] = 0
109
-
110
- def _ActivateWarningInterceptions(self) -> None:
111
- """
112
- The log message will not appear if called from __post_init__ since there are no
113
- handlers yet.
114
- """
115
- if self.intercepted_wrn_handle is None:
116
- logger = l.getLogger(WARNING_LOGGER_NAME)
117
- self.intercepted_wrn_handle = logger.handle
118
- logger.handle = t.MethodType(_HandleForWarnings(self), logger)
119
-
120
- l.captureWarnings(True)
121
- self.info("Warning Interception: ON")
122
-
123
- def _DeactivateWarningInterceptions(self) -> None:
90
+ @property
91
+ def intercepts_warnings(self) -> bool:
124
92
  """"""
125
- if self.intercepted_wrn_handle is not None:
126
- logger = l.getLogger(WARNING_LOGGER_NAME)
127
- logger.handle = self.intercepted_wrn_handle
128
- self.intercepted_wrn_handle = None
93
+ return self.intercepted_wrn_handle is not None
129
94
 
130
- l.captureWarnings(False)
131
- self.info("Warning Interception: OFF")
132
-
133
- def ToggleWarningInterceptions(self, state: bool, /) -> None:
95
+ @property
96
+ def intercepts_logs(self) -> bool:
134
97
  """"""
135
- if state:
136
- self._ActivateWarningInterceptions()
137
- else:
138
- self._DeactivateWarningInterceptions()
98
+ return self.intercepted_log_handles.__len__() > 0
139
99
 
140
- def ToggleLogInterceptions(self, state: bool, /) -> None:
100
+ @property
101
+ def has_staged_issues(self) -> bool:
141
102
  """"""
142
- if state:
143
- self.ToggleLogInterceptions(False)
144
-
145
- all_loggers = [l.getLogger()] + [
146
- l.getLogger(_nme)
147
- for _nme in self.manager.loggerDict
148
- if _nme not in (self.name, WARNING_LOGGER_NAME)
149
- ]
150
- for logger in all_loggers:
151
- self.intercepted_log_handles[logger.name] = logger.handle
152
- logger.handle = t.MethodType(
153
- _HandleForInterceptions(logger, self), logger
154
- )
155
-
156
- intercepted = sorted(self.intercepted_log_handles.keys())
157
- if intercepted.__len__() > 0:
158
- as_str = ", ".join(intercepted)
159
- self.info(f"Now Intercepting LOGs from: {as_str}")
160
- elif self.intercepted_log_handles.__len__() > 0:
161
- for name, handle in self.intercepted_log_handles.items():
162
- logger = l.getLogger(name)
163
- logger.handle = handle
164
- self.intercepted_log_handles.clear()
165
- self.info("Log Interception: OFF")
103
+ return self.staged_issues.__len__() > 0
166
104
 
167
105
  @property
168
106
  def max_memory_usage(self) -> int:
@@ -182,29 +120,23 @@ class logger_t(logger_base_t):
182
120
 
183
121
  return "?", UNKNOWN_MEMORY_USAGE
184
122
 
185
- def AddHandler(self, handler: l.Handler, should_hold_messages: bool, /) -> None:
123
+ def __post_init__(
124
+ self, name_: str, level_: int, activate_wrn_interceptions: bool
125
+ ) -> None:
186
126
  """"""
187
- self.should_hold_messages = should_hold_messages
188
- logger_base_t.addHandler(self, handler)
127
+ base_t.__init__(self, name_)
128
+ self.setLevel(level_)
129
+ self.propagate = False # Part of base_t.
189
130
 
190
- extension = getattr(handler, "extension", None)
191
- if extension is None:
192
- name = handler.name
193
- if (name is None) or (name.__len__() == 0):
194
- name = ANONYMOUS
195
- else:
196
- name = getattr(extension, "name", ANONYMOUS)
197
- if getattr(extension, STORE_MEMORY_ATTR, False):
198
- self.any_handler_stores_memory = True
131
+ for level in l.getLevelNamesMapping().values():
132
+ self.events[level] = 0
199
133
 
200
- path = getattr(handler, "baseFilename", "")
201
- if isinstance(path, path_t) or (path.__len__() > 0):
202
- path = f"\nPath: {path}"
134
+ self.info(f'New logger "{self.name}" for "{PROJECT_FILE_RELATIVE}"')
203
135
 
204
- self.info(
205
- f'New handler "{name}" of type "{type(handler).__name__}" and '
206
- f"level {handler.level}={l.getLevelName(handler.level)}{path}",
207
- )
136
+ if activate_wrn_interceptions:
137
+ self.ToggleWarningInterceptions(True)
138
+ if self.exit_on_error:
139
+ self.exit_on_critical = True
208
140
 
209
141
  def handle(self, record: l.LogRecord, /) -> None:
210
142
  """"""
@@ -212,7 +144,7 @@ class logger_t(logger_base_t):
212
144
 
213
145
  if (self.on_hold.__len__() > 0) and not self.should_hold_messages:
214
146
  for held in self.on_hold:
215
- logger_base_t.handle(self, held)
147
+ base_t.handle(self, held)
216
148
  self.on_hold.clear()
217
149
 
218
150
  if (date := now.date()) != self.last_message_date:
@@ -229,7 +161,7 @@ class logger_t(logger_base_t):
229
161
  if self.should_hold_messages:
230
162
  self.on_hold.append(date_record)
231
163
  else:
232
- logger_base_t.handle(self, date_record)
164
+ base_t.handle(self, date_record)
233
165
 
234
166
  # When.
235
167
  if now - self.last_message_now > LONG_ENOUGH:
@@ -271,7 +203,7 @@ class logger_t(logger_base_t):
271
203
  if self.should_hold_messages:
272
204
  self.on_hold.append(record)
273
205
  else:
274
- logger_base_t.handle(self, record)
206
+ base_t.handle(self, record)
275
207
 
276
208
  if (self.exit_on_critical and (record.levelno is l.CRITICAL)) or (
277
209
  self.exit_on_error and (record.levelno is l.ERROR)
@@ -285,6 +217,177 @@ class logger_t(logger_base_t):
285
217
  if should_store_where:
286
218
  self.memory_usages.append((where, CurrentMemoryUsage()))
287
219
 
220
+ def SetLevel(
221
+ self,
222
+ level: int,
223
+ /,
224
+ *,
225
+ which: handler_codes_h | str = "a",
226
+ ) -> None:
227
+ """
228
+ Set level of handlers, but the logger level is not modified.
229
+
230
+ which: if not a handler_codes_h, then it corresponds to a handler name.
231
+ """
232
+ found = False
233
+ for handler in self.handlers:
234
+ if (
235
+ (which == "a")
236
+ or ((which in "cfg") and (getattr(handler, "kind", None) == which))
237
+ or (which == handler.name)
238
+ ):
239
+ handler.setLevel(level)
240
+ if which not in HANDLER_KINDS:
241
+ return
242
+ found = True
243
+
244
+ if not found:
245
+ raise ValueError(
246
+ MessageWithActualExpected(
247
+ "Handler not found",
248
+ actual=which,
249
+ expected=f"{str(HANDLER_KINDS)[1:-1]}, or a handler name",
250
+ )
251
+ )
252
+
253
+ def MakeMonochrome(
254
+ self,
255
+ *,
256
+ should_intercept_logs: bool = True,
257
+ should_override_exceptions: bool = True,
258
+ ) -> None:
259
+ """"""
260
+ self._MakePreamble(
261
+ should_intercept_logs=should_intercept_logs,
262
+ should_override_exceptions=should_override_exceptions,
263
+ )
264
+ AddConsoleHandler(self)
265
+
266
+ def MakeRich(
267
+ self,
268
+ *,
269
+ alternating_lines: int = 2,
270
+ should_intercept_logs: bool = True,
271
+ should_override_exceptions: bool = True,
272
+ ) -> None:
273
+ """"""
274
+ self._MakePreamble(
275
+ should_intercept_logs=should_intercept_logs,
276
+ should_override_exceptions=should_override_exceptions,
277
+ )
278
+ AddRichConsoleHandler(self, alternating_lines=alternating_lines)
279
+
280
+ def MakePermanent(
281
+ self,
282
+ path: str | path_t,
283
+ /,
284
+ *,
285
+ should_intercept_logs: bool = True,
286
+ should_override_exceptions: bool = True,
287
+ ) -> None:
288
+ """"""
289
+ self._MakePreamble(
290
+ should_intercept_logs=should_intercept_logs,
291
+ should_override_exceptions=should_override_exceptions,
292
+ )
293
+ AddFileHandler(self, path)
294
+
295
+ def _MakePreamble(
296
+ self,
297
+ *,
298
+ should_intercept_logs: bool = True,
299
+ should_override_exceptions: bool = True,
300
+ ) -> None:
301
+ """"""
302
+ if should_override_exceptions:
303
+ OverrideExceptionFormat()
304
+ if should_intercept_logs:
305
+ self.ToggleLogInterceptions(True)
306
+
307
+ def ResetEventCounts(self) -> None:
308
+ """"""
309
+ for level in self.events:
310
+ self.events[level] = 0
311
+
312
+ def ToggleWarningInterceptions(self, state: bool, /) -> None:
313
+ """
314
+ The log message will not appear if called from __post_init__ since there are no
315
+ handlers yet.
316
+ """
317
+ if state:
318
+ assert not self.intercepts_warnings
319
+
320
+ logger = l.getLogger(WARNING_LOGGER_NAME)
321
+ self.intercepted_wrn_handle = logger.handle
322
+ logger.handle = t.MethodType(_HandleForWarnings(self), logger)
323
+
324
+ l.captureWarnings(True)
325
+ self.info("Warning Interception: ON")
326
+ else:
327
+ assert self.intercepts_warnings
328
+
329
+ logger = l.getLogger(WARNING_LOGGER_NAME)
330
+ logger.handle = self.intercepted_wrn_handle
331
+ self.intercepted_wrn_handle = None
332
+
333
+ l.captureWarnings(False)
334
+ self.info("Warning Interception: OFF")
335
+
336
+ def ToggleLogInterceptions(self, state: bool, /) -> None:
337
+ """"""
338
+ if state:
339
+ assert not self.intercepts_logs
340
+
341
+ all_loggers = [l.getLogger()] + [
342
+ l.getLogger(_nme)
343
+ for _nme in self.manager.loggerDict
344
+ if _nme not in (self.name, WARNING_LOGGER_NAME)
345
+ ]
346
+ for logger in all_loggers:
347
+ self.intercepted_log_handles[logger.name] = logger.handle
348
+ logger.handle = t.MethodType(
349
+ _HandleForInterceptions(logger, self), logger
350
+ )
351
+
352
+ intercepted = sorted(self.intercepted_log_handles.keys())
353
+ if intercepted.__len__() > 0:
354
+ as_str = ", ".join(intercepted)
355
+ self.info(f"Now Intercepting LOGs from: {as_str}")
356
+ else:
357
+ assert self.intercepts_logs
358
+
359
+ for name, handle in self.intercepted_log_handles.items():
360
+ logger = l.getLogger(name)
361
+ logger.handle = handle
362
+ self.intercepted_log_handles.clear()
363
+ self.info("Log Interception: OFF")
364
+
365
+ def AddHandler(
366
+ self, handler: l.Handler, /, *, should_hold_messages: bool = False
367
+ ) -> None:
368
+ """"""
369
+ self.should_hold_messages = should_hold_messages
370
+ base_t.addHandler(self, handler)
371
+
372
+ extension = getattr(handler, "extension", None)
373
+ if extension is None:
374
+ name = handler.name
375
+ if (name is None) or (name.__len__() == 0):
376
+ name = ANONYMOUS
377
+ else:
378
+ name = getattr(extension, "name", ANONYMOUS)
379
+ if getattr(extension, STORE_MEMORY_ATTR, False):
380
+ self.any_handler_stores_memory = True
381
+
382
+ path = getattr(handler, "baseFilename", "")
383
+ if isinstance(path, path_t) or (path.__len__() > 0):
384
+ path = f"\nPath: {path}"
385
+
386
+ self.info(
387
+ f'New handler "{name}" of type "{type(handler).__name__}" and '
388
+ f"level {handler.level}={l.getLevelName(handler.level)}{path}",
389
+ )
390
+
288
391
  def Log(
289
392
  self,
290
393
  message: str,
@@ -332,22 +435,31 @@ class logger_t(logger_base_t):
332
435
  message = f"{type(exception).__name__}:\n{formatted}"
333
436
  self.log(level, message)
334
437
 
335
- def ShowMessage(self, message: str, /, *, indented: bool = False) -> None:
438
+ def LogAsIs(self, message: str, /, *, indented: bool = False) -> None:
336
439
  """
337
440
  See documentation of
338
- logger_36.catalog.handler.generic.generic_handler_t.ShowMessage.
441
+ logger_36.catalog.handler.generic.generic_handler_t.LogAsIs.
339
442
  """
443
+ if indented:
444
+ message = text.indent(message, LINE_INDENT)
445
+
340
446
  for handler in self.handlers:
341
- ShowMessage = getattr(handler, "ShowMessage", None)
342
- if ShowMessage is not None:
343
- ShowMessage(message, indented=indented)
447
+ if (LogAsIs := getattr(handler, "LogAsIs", None)) is None:
448
+ self.info(message)
449
+ else:
450
+ LogAsIs(message)
451
+
452
+ raw_info = LogAsIs # To follow the convention of the logging methods info, error...
344
453
 
345
- def DisplayRule(self, /, *, text: str | None = None, color: str = "white") -> None:
454
+ def DisplayRule(
455
+ self, /, *, message: str | None = None, color: str = "white"
456
+ ) -> None:
346
457
  """"""
347
458
  for handler in self.handlers:
348
- DisplayRule = getattr(handler, "DisplayRule", None)
349
- if DisplayRule is not None:
350
- DisplayRule(text=text, color=color)
459
+ if (DisplayRule := getattr(handler, "DisplayRule", None)) is None:
460
+ self.info(RuleAsText(message))
461
+ else:
462
+ DisplayRule(text=message, color=color)
351
463
 
352
464
  def AddContextLevel(self, new_level: str, /) -> None:
353
465
  """"""
@@ -389,11 +501,6 @@ class logger_t(logger_base_t):
389
501
  )
390
502
  self.staged_issues.append(issue)
391
503
 
392
- @property
393
- def has_staged_issues(self) -> bool:
394
- """"""
395
- return self.staged_issues.__len__() > 0
396
-
397
504
  def CommitIssues(
398
505
  self,
399
506
  /,
@@ -462,10 +569,10 @@ class logger_t(logger_base_t):
462
569
  return False
463
570
 
464
571
 
465
- def _HandleForWarnings(interceptor: logger_base_t, /) -> logger_handle_h:
572
+ def _HandleForWarnings(interceptor: base_t, /) -> logger_handle_h:
466
573
  """"""
467
574
 
468
- def handle_p(_: logger_base_t, record: l.LogRecord, /) -> None:
575
+ def handle_p(_: base_t, record: l.LogRecord, /) -> None:
469
576
  pieces = WARNING_TYPE_COMPILED_PATTERN.match(record.msg)
470
577
  if pieces is None:
471
578
  # The warning message does not follow the default format.
@@ -491,11 +598,11 @@ def _HandleForWarnings(interceptor: logger_base_t, /) -> logger_handle_h:
491
598
 
492
599
 
493
600
  def _HandleForInterceptions(
494
- intercepted: logger_base_t, interceptor: logger_base_t, /
601
+ intercepted: base_t, interceptor: base_t, /
495
602
  ) -> logger_handle_h:
496
603
  """"""
497
604
 
498
- def handle_p(_: logger_base_t, record: l.LogRecord, /) -> None:
605
+ def handle_p(_: base_t, record: l.LogRecord, /) -> None:
499
606
  duplicate = l.makeLogRecord(record.__dict__)
500
607
  duplicate.msg = f"{record.msg} :{intercepted.name}:"
501
608
  interceptor.handle(duplicate)
logger_36/version.py CHANGED
@@ -4,7 +4,7 @@ Contributor(s): Eric Debreuve (eric.debreuve@cnrs.fr) since 2023
4
4
  SEE COPYRIGHT NOTICE BELOW
5
5
  """
6
6
 
7
- __version__ = "2025.5"
7
+ __version__ = "2025.7"
8
8
 
9
9
  """
10
10
  COPYRIGHT NOTICE
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: logger-36
3
- Version: 2025.5
3
+ Version: 2025.7
4
4
  Summary: Simple logger with a catalog of handlers
5
5
  Home-page: https://src.koda.cnrs.fr/eric.debreuve/logger-36/
6
6
  Author: Eric Debreuve
@@ -0,0 +1,53 @@
1
+ logger_36/__init__.py,sha256=3BtAgxFb14e9zzC5fXwqSQxstsd3BO0b_KVu3_wbLwg,2592
2
+ logger_36/content.py,sha256=clHYYUKa8n4qef6PVlUV4mFHRRf6fnm9wEd2fu9oagA,2381
3
+ logger_36/exception.py,sha256=BQm9maX9CMjpqN26cEsArPCcX37LqYtQSrUZ3fN8tbU,4613
4
+ logger_36/gpu.py,sha256=BOumedCAPWvCo7J-KJ3XE-jr5S0KSmgcFv_S4QKRPO8,2252
5
+ logger_36/handler.py,sha256=pIwunW-_aSB-SrdlvVmq61nOTH03deKIVcJa4Sz_hkc,6304
6
+ logger_36/memory.py,sha256=szJVk4UTXsbYv3B-W9LFttf1F3j86GXHsKgEUOsXKl4,2743
7
+ logger_36/storage.py,sha256=sCxkHQH4xMaseweK1p2M1j0j2PxNPpy9MytPdg1sKiQ,2239
8
+ logger_36/system.py,sha256=cgOMF_OneYeIJDMbIbIDx96EZss2uAdkk8QofOC7O1U,2251
9
+ logger_36/time.py,sha256=Uw1jQtY1njsRuIPRAXX44v4nPOo84MSBu_WK_YCRzQs,2324
10
+ logger_36/version.py,sha256=QWIy4Jr-I6cIfY2uS0OZkwf54A1Oh3Rxgb14HI6W6bE,2205
11
+ logger_36/api/logger.py,sha256=TE3ATbymeWX-wBKBFkVz2FxUyJnaqY7vzFwAONVsp2o,2233
12
+ logger_36/api/storage.py,sha256=KT52AGR37nsMrhKTVfG8R-Dc7lmCXjWML18cOqqCXZY,2239
13
+ logger_36/catalog/config/console_rich.py,sha256=lAa5Ev5BhXvmQzfIt1FNihMNUQJFlXaIzNanAMdgtd0,2861
14
+ logger_36/catalog/config/optional.py,sha256=HaN6mbx7gHBBppNvUw1ckhYTOrlYqb-b_r0mzPcHPjM,2398
15
+ logger_36/catalog/handler/console.py,sha256=s2DBcDK9To-wVS228RsDDPmOPxlIbVnQbZINfIK2TP0,4150
16
+ logger_36/catalog/handler/console_rich.py,sha256=pI0OE0c5I19-ycvOJjdG5vdtDXTZadNNRbKCJD-2oL4,8347
17
+ logger_36/catalog/handler/file.py,sha256=2qbsI3UHxqEm9WiCMkAm20hA2qXth2wKnakazVbwrBs,4613
18
+ logger_36/catalog/handler/generic.py,sha256=y-f6HY5xppoHYYnej0qOQT3BI0Gam_0W1_bIHCk5nn0,9212
19
+ logger_36/catalog/logger/chronos.py,sha256=ocY13f98EfknU7wZCv0FS9Xb7pTNaWCPSusXFIEvEd4,2437
20
+ logger_36/catalog/logger/gpu.py,sha256=lzrkqrMnXsszRB_TiHFqnNNI7JhNat8qL2OSlnHDe5c,3412
21
+ logger_36/catalog/logger/memory.py,sha256=CWhr2J4BqArJxzH6tS-ZThr-rYPAQGtuLn0pP7Iryfg,4685
22
+ logger_36/catalog/logger/system.py,sha256=KXP2jdPd-ACFNdA0wWdmOLwuxt4baUvXkuChyOHyfy0,3066
23
+ logger_36/config/issue.py,sha256=G-i5p6lhZCLAOa-VTMyL9ZonvGCvhdoQ5KZdSWgP-FU,2267
24
+ logger_36/config/memory.py,sha256=yCX5phsB_KJMr5xHpVUeOHFhAA7p_8yahP3X28VndOY,2217
25
+ logger_36/config/message.py,sha256=yfbMO_Jk1IbWvT6Lp6hVpID2Tr99cuiJ-ZaMBesIFXw,2527
26
+ logger_36/config/system.py,sha256=HD8ZuwsXhEAExeZrww8YoDkQGMs4T5RDqQMb1W4qVgc,2477
27
+ logger_36/constant/error.py,sha256=LzsS_P1IoH3ct_ifNWi9LzJ-X_Y5DN1naTLwwIFzDQA,2827
28
+ logger_36/constant/generic.py,sha256=t6aRb66_NHwMhR1p7BZ4QXTU2jpLz-H5YAL4PuMtKx8,2244
29
+ logger_36/constant/handler.py,sha256=PQUehMK9Yg0_rBDcMc8xpUbAsCauCLy_eS_ntiWew1Y,2378
30
+ logger_36/constant/issue.py,sha256=01l8itRPWGS5F6gXtsXUJgGR-4lS1Eu3_YeKC-khKLw,2315
31
+ logger_36/constant/logger.py,sha256=2qRkteblpbHrq9x0aiw9MPquyXrSRd6_yMQnPEhFp2U,2468
32
+ logger_36/constant/memory.py,sha256=ZL1MwbdtNsrCrOwzEyfTsfOoOsRBTJtbbf3otHGnxXo,2343
33
+ logger_36/constant/message.py,sha256=Ys_CAyhENlT8Z3rr-AxO4hjdl1jLsKzVSPQ8wqLOCPQ,2838
34
+ logger_36/constant/path.py,sha256=fKJn2vGj012BU5DFRetDFus_tKMty2q_WL0J2KrXdCo,2731
35
+ logger_36/constant/record.py,sha256=9Q28lVH_s0og4v74delgwIPAJ9G28I5rBM-brXcoY80,2308
36
+ logger_36/constant/system.py,sha256=G2mzBTxRXoJMxb53TnmBaceMJC_q3WonoCG7y6nC_R8,2430
37
+ logger_36/instance/logger.py,sha256=oTw5svRzKRJKvGrrZUtutJIOjp5UISft3fl0Ze7DOBE,2241
38
+ logger_36/instance/loggers.py,sha256=RCWpC1NPAf6vXnFc9NqsSALv-x-FEzcH6k_OlxTxeQk,2251
39
+ logger_36/task/inspection.py,sha256=KZzmQyREQ6VmBWCLyNIYIOOISW9C_fC9TWTSX90zGDk,5019
40
+ logger_36/task/storage.py,sha256=2B4OU7RqpUe98-pY9fadfnW8aFwxtsLSRGKkBtGWn-k,5686
41
+ logger_36/task/format/memory.py,sha256=jpQS8tAdxy7GM_FzqEIJUU3m-6O9iX-jiyO7gx5YwR8,4266
42
+ logger_36/task/format/message.py,sha256=T2V2gUlUQqSojyRrz4I4uAHwNe6eBEsuAe6V-LTyx0k,3867
43
+ logger_36/task/format/rule.py,sha256=vkf-HivFb4VqV2GeOPVqMAp99krtziI-kXhox3UVnzw,2873
44
+ logger_36/task/measure/chronos.py,sha256=1kVhu6jZlNAtNWQQh8ZVuRwZIAC9gGz3_ul1tn0t4Yw,3055
45
+ logger_36/task/measure/memory.py,sha256=OjU5EYFH8SnzlCQKAoiXvauUlwQYOrH34jFXTVYF0jE,2517
46
+ logger_36/type/handler.py,sha256=-myl7uBMOzkwCs1u4ehuYlQa9F6909jmnL2v_eQN5ag,6819
47
+ logger_36/type/issue.py,sha256=2rGsFqaQJCbeml9xN08mN_nK79L8qscaS_0ws36Y0bI,3214
48
+ logger_36/type/logger.py,sha256=nGNWJ5xcyA79E45qcZ-gZ3ZuY7j1aDg5NXk7VwbQVFU,22287
49
+ logger_36/type/loggers.py,sha256=znqxWBnfQxvkg3VUfbTUvt3S6Kq0DAzWWepxQDt9suI,2871
50
+ logger_36-2025.7.dist-info/METADATA,sha256=E708bS17nu3wkJZ7YTNfvezYSBUbfwXgUCwiiXwOkf0,6505
51
+ logger_36-2025.7.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
52
+ logger_36-2025.7.dist-info/top_level.txt,sha256=sM95BTMWmslEEgR_1pzwZsOeSp8C_QBiu8ImbFr0XLc,10
53
+ logger_36-2025.7.dist-info/RECORD,,
@@ -1,52 +0,0 @@
1
- logger_36/__init__.py,sha256=3BtAgxFb14e9zzC5fXwqSQxstsd3BO0b_KVu3_wbLwg,2592
2
- logger_36/content.py,sha256=ni9gdYYNZoDa91KNianWBluOBe9KxZMZtzalcBS6vhE,2357
3
- logger_36/exception.py,sha256=CDHwCeILgCq8Z9IF0xDwd37wTczxFUTUSngtO0RCs00,3415
4
- logger_36/gpu.py,sha256=YYFk6aYQrBDJfxQaDm-ar16T6SlOSL6jJWTOgvpF4EU,2244
5
- logger_36/handler.py,sha256=Lle0eHQGXw86kDKhFPAsbc6VTtKAGBRY3NbgRwb22D0,6242
6
- logger_36/memory.py,sha256=FTc3qCeMqnCNvHJ4Yds73noPENQx_U1MYB-R4LLUjVQ,2682
7
- logger_36/storage.py,sha256=TNfIXEfHcjixv75wocUyqwX62iDYsor4srRqC3FNzbc,2231
8
- logger_36/system.py,sha256=xzm6cMeTaCX9VX9ZRXUXgfqoT9oUtv3W2o_H2W0P-4Q,2243
9
- logger_36/time.py,sha256=_CtpQeUZdsUNGNfwzhoWUiUvawRgmonqwZPHouzWf5M,2308
10
- logger_36/version.py,sha256=fGumU_oHdColabh0PPq2BbbOtvjiaBGJGm7CfodTKq8,2205
11
- logger_36/api/logger.py,sha256=Wg2nzQeuRVZ4v-oy3Q2KdYsHSzF9v7a0Fk6BzLnbkYw,2225
12
- logger_36/api/storage.py,sha256=evKVqIsslA5X82LaZ2HQDxp7ltyNOn8Tr-3-Pic3eUo,2231
13
- logger_36/catalog/config/console_rich.py,sha256=hp2r1bsT_Zj4c-IzL6-sPQKe0yrIKUX7IxseK-znXTo,2845
14
- logger_36/catalog/handler/console.py,sha256=glrpWsmZsB7uZdQA0HLSKGGIz6OrvhOOiJp5XRibBNU,4226
15
- logger_36/catalog/handler/console_rich.py,sha256=09xd50E8REu2iFtTNj0rYJfUFVxBzneqwWTmSYquiM0,8355
16
- logger_36/catalog/handler/file.py,sha256=C6x58N2asQ4LDBTKyNBBOlIs719FeVg80PsaDjlDg04,4690
17
- logger_36/catalog/handler/generic.py,sha256=LE2_aEMjM2sjoPN9i7E0OEulKt6f-SYAoqYZ_ugVnZc,9123
18
- logger_36/catalog/logger/chronos.py,sha256=ocY13f98EfknU7wZCv0FS9Xb7pTNaWCPSusXFIEvEd4,2437
19
- logger_36/catalog/logger/gpu.py,sha256=dw1eiEJurjXZBE1EhrHHR2LJbcHZ9sUSB9Z_SoJk2Ts,3407
20
- logger_36/catalog/logger/memory.py,sha256=CWhr2J4BqArJxzH6tS-ZThr-rYPAQGtuLn0pP7Iryfg,4685
21
- logger_36/catalog/logger/system.py,sha256=KXP2jdPd-ACFNdA0wWdmOLwuxt4baUvXkuChyOHyfy0,3066
22
- logger_36/config/issue.py,sha256=G-i5p6lhZCLAOa-VTMyL9ZonvGCvhdoQ5KZdSWgP-FU,2267
23
- logger_36/config/logger.py,sha256=Iiox_X1N2Ty73N-Ao0XI6dsBebXqvZd0efP3h1txYjc,3691
24
- logger_36/config/memory.py,sha256=yCX5phsB_KJMr5xHpVUeOHFhAA7p_8yahP3X28VndOY,2217
25
- logger_36/config/message.py,sha256=yfbMO_Jk1IbWvT6Lp6hVpID2Tr99cuiJ-ZaMBesIFXw,2527
26
- logger_36/config/system.py,sha256=HD8ZuwsXhEAExeZrww8YoDkQGMs4T5RDqQMb1W4qVgc,2477
27
- logger_36/constant/error.py,sha256=1gdnCwUu3d3ThL4AKxzjn7ijSTBWlr2g-8cAKbubl4A,2825
28
- logger_36/constant/generic.py,sha256=t6aRb66_NHwMhR1p7BZ4QXTU2jpLz-H5YAL4PuMtKx8,2244
29
- logger_36/constant/handler.py,sha256=cBf_bPB9fceCuIpzmqj345vaas-kx17YRO-rFF3Cvms,2338
30
- logger_36/constant/issue.py,sha256=01l8itRPWGS5F6gXtsXUJgGR-4lS1Eu3_YeKC-khKLw,2315
31
- logger_36/constant/logger.py,sha256=yorhAOTQTlIKE_51LZUhXfehrBAPfiPRJ5qJ4NA4GP8,2664
32
- logger_36/constant/memory.py,sha256=ZL1MwbdtNsrCrOwzEyfTsfOoOsRBTJtbbf3otHGnxXo,2343
33
- logger_36/constant/message.py,sha256=Ys_CAyhENlT8Z3rr-AxO4hjdl1jLsKzVSPQ8wqLOCPQ,2838
34
- logger_36/constant/record.py,sha256=9Q28lVH_s0og4v74delgwIPAJ9G28I5rBM-brXcoY80,2308
35
- logger_36/constant/system.py,sha256=G2mzBTxRXoJMxb53TnmBaceMJC_q3WonoCG7y6nC_R8,2430
36
- logger_36/instance/logger.py,sha256=oTw5svRzKRJKvGrrZUtutJIOjp5UISft3fl0Ze7DOBE,2241
37
- logger_36/instance/loggers.py,sha256=RCWpC1NPAf6vXnFc9NqsSALv-x-FEzcH6k_OlxTxeQk,2251
38
- logger_36/task/inspection.py,sha256=KZzmQyREQ6VmBWCLyNIYIOOISW9C_fC9TWTSX90zGDk,5019
39
- logger_36/task/storage.py,sha256=33Fz-7Isko_e6z9Ig9IkgDJ-NQKgkPhI4Pw3w6IlH1E,5632
40
- logger_36/task/format/memory.py,sha256=jpQS8tAdxy7GM_FzqEIJUU3m-6O9iX-jiyO7gx5YwR8,4266
41
- logger_36/task/format/message.py,sha256=T2V2gUlUQqSojyRrz4I4uAHwNe6eBEsuAe6V-LTyx0k,3867
42
- logger_36/task/format/rule.py,sha256=OjNZQa_dZrH4Vhide6xm3EuV0lLC6tR1Q2_ZAxD7ito,2813
43
- logger_36/task/measure/chronos.py,sha256=1kVhu6jZlNAtNWQQh8ZVuRwZIAC9gGz3_ul1tn0t4Yw,3055
44
- logger_36/task/measure/memory.py,sha256=-V9UDFlDwmtUlfBzovcMgmsaYxwyoE1YmfXjXZ2iuNc,2512
45
- logger_36/type/handler.py,sha256=_cmOyF48nMTMUspSGH-Z1iil5AzEBW9wcEeTfC8lld8,6447
46
- logger_36/type/issue.py,sha256=2rGsFqaQJCbeml9xN08mN_nK79L8qscaS_0ws36Y0bI,3214
47
- logger_36/type/logger.py,sha256=7NI6P5VkjMVdpirEMqIAhVADh-nOpKmKgDgHOqDSF4k,19332
48
- logger_36/type/loggers.py,sha256=znqxWBnfQxvkg3VUfbTUvt3S6Kq0DAzWWepxQDt9suI,2871
49
- logger_36-2025.5.dist-info/METADATA,sha256=5nalYzhNdZDZoLfFlrBBRzRkLbnBR7U7mVqcfl_vQDs,6505
50
- logger_36-2025.5.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
51
- logger_36-2025.5.dist-info/top_level.txt,sha256=sM95BTMWmslEEgR_1pzwZsOeSp8C_QBiu8ImbFr0XLc,10
52
- logger_36-2025.5.dist-info/RECORD,,