logger-36 2025.4__py3-none-any.whl → 2025.6__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.
Files changed (39) hide show
  1. logger_36/__init__.py +2 -1
  2. logger_36/api/logger.py +1 -1
  3. logger_36/api/storage.py +1 -1
  4. logger_36/catalog/config/console_rich.py +9 -9
  5. logger_36/{config/logger.py → catalog/config/optional.py} +8 -51
  6. logger_36/catalog/handler/console.py +15 -8
  7. logger_36/catalog/handler/console_rich.py +20 -13
  8. logger_36/catalog/handler/file.py +14 -8
  9. logger_36/catalog/handler/generic.py +20 -12
  10. logger_36/catalog/logger/chronos.py +2 -2
  11. logger_36/catalog/logger/gpu.py +6 -6
  12. logger_36/catalog/logger/memory.py +3 -3
  13. logger_36/catalog/logger/system.py +2 -2
  14. logger_36/constant/error.py +1 -1
  15. logger_36/constant/handler.py +2 -2
  16. logger_36/constant/logger.py +2 -9
  17. logger_36/content.py +3 -3
  18. logger_36/exception.py +51 -17
  19. logger_36/gpu.py +1 -1
  20. logger_36/handler.py +28 -41
  21. logger_36/instance/logger.py +1 -1
  22. logger_36/memory.py +9 -6
  23. logger_36/storage.py +1 -1
  24. logger_36/system.py +1 -1
  25. logger_36/task/format/rule.py +4 -2
  26. logger_36/task/inspection.py +3 -3
  27. logger_36/task/measure/chronos.py +1 -3
  28. logger_36/task/measure/memory.py +2 -2
  29. logger_36/task/storage.py +16 -16
  30. logger_36/time.py +2 -2
  31. logger_36/type/handler.py +31 -12
  32. logger_36/type/issue.py +2 -2
  33. logger_36/type/logger.py +90 -44
  34. logger_36/version.py +1 -1
  35. {logger_36-2025.4.dist-info → logger_36-2025.6.dist-info}/METADATA +1 -1
  36. logger_36-2025.6.dist-info/RECORD +52 -0
  37. logger_36-2025.4.dist-info/RECORD +0 -52
  38. {logger_36-2025.4.dist-info → logger_36-2025.6.dist-info}/WHEEL +0 -0
  39. {logger_36-2025.4.dist-info → logger_36-2025.6.dist-info}/top_level.txt +0 -0
logger_36/type/logger.py CHANGED
@@ -5,8 +5,8 @@ SEE COPYRIGHT NOTICE BELOW
5
5
  """
6
6
 
7
7
  import dataclasses as d
8
- import logging as lggg
9
- import sys as sstm
8
+ import logging as l
9
+ import sys as s
10
10
  import traceback as tcbk
11
11
  import types as t
12
12
  import typing as h
@@ -24,13 +24,12 @@ from logger_36.config.message import (
24
24
  TIME_FORMAT,
25
25
  )
26
26
  from logger_36.constant.generic import NOT_PASSED
27
- from logger_36.constant.handler import ANONYMOUS
27
+ from logger_36.constant.handler import ANONYMOUS, HANDLER_KINDS, handler_codes_h
28
28
  from logger_36.constant.issue import ISSUE_LEVEL_SEPARATOR, ORDER, order_h
29
29
  from logger_36.constant.logger import (
30
30
  LOGGER_NAME,
31
31
  WARNING_LOGGER_NAME,
32
32
  WARNING_TYPE_COMPILED_PATTERN,
33
- logger_handle_h,
34
33
  )
35
34
  from logger_36.constant.memory import UNKNOWN_MEMORY_USAGE
36
35
  from logger_36.constant.message import TIME_LENGTH_m_1, expected_op_h
@@ -39,25 +38,32 @@ from logger_36.constant.record import (
39
38
  SHOW_W_RULE_ATTR,
40
39
  STORE_MEMORY_ATTR,
41
40
  )
41
+ from logger_36.exception import OverrideExceptionFormat
42
+ from logger_36.handler import AddRichConsoleHandler
42
43
  from logger_36.task.format.message import MessageWithActualExpected
43
44
  from logger_36.task.measure.chronos import ElapsedTime
44
45
  from logger_36.task.measure.memory import CurrentUsage as CurrentMemoryUsage
45
46
  from logger_36.type.issue import NewIssue, issue_t
46
47
 
47
- logger_base_t = lggg.Logger
48
+ base_t = l.Logger
49
+
50
+ logger_handle_raw_h = h.Callable[[l.LogRecord], None]
51
+ logger_handle_with_self_h = h.Callable[[l.Logger, l.LogRecord], None]
52
+ logger_handle_h = logger_handle_raw_h | logger_handle_with_self_h
48
53
 
49
54
  _DATE_TIME_ORIGIN = date_time_t.fromtimestamp(1970, None)
50
55
  _DATE_ORIGIN = _DATE_TIME_ORIGIN.date()
51
56
 
52
57
 
53
58
  @d.dataclass(slots=True, repr=False, eq=False)
54
- class logger_t(logger_base_t):
59
+ class logger_t(base_t):
55
60
  """
56
61
  intercepted_wrn_handle: When warning interception is on, this stores the original
57
62
  "handle" method of the Python warning logger.
58
63
  """
64
+
59
65
  name_: d.InitVar[str] = LOGGER_NAME
60
- level_: d.InitVar[int] = lggg.NOTSET
66
+ level_: d.InitVar[int] = l.NOTSET
61
67
  activate_wrn_interceptions: d.InitVar[bool] = True
62
68
 
63
69
  # Must not be False until at least one handler has been added.
@@ -65,7 +71,7 @@ class logger_t(logger_base_t):
65
71
  exit_on_error: bool = False # Implies exit_on_critical.
66
72
  exit_on_critical: bool = False
67
73
 
68
- on_hold: list[lggg.LogRecord] = d.field(init=False, default_factory=list)
74
+ on_hold: list[l.LogRecord] = d.field(init=False, default_factory=list)
69
75
  events: dict[int, int] = d.field(init=False, default_factory=dict)
70
76
  last_message_now: date_time_t = d.field(init=False, default=_DATE_TIME_ORIGIN)
71
77
  last_message_date: date_t = d.field(init=False, default=_DATE_ORIGIN)
@@ -82,11 +88,11 @@ class logger_t(logger_base_t):
82
88
  self, name_: str, level_: int, activate_wrn_interceptions: bool
83
89
  ) -> None:
84
90
  """"""
85
- logger_base_t.__init__(self, name_)
91
+ base_t.__init__(self, name_)
86
92
  self.setLevel(level_)
87
- self.propagate = False # Part of logger_base_t.
93
+ self.propagate = False # Part of base_t.
88
94
 
89
- for level in lggg.getLevelNamesMapping().values():
95
+ for level in l.getLevelNamesMapping().values():
90
96
  self.events[level] = 0
91
97
 
92
98
  if activate_wrn_interceptions:
@@ -94,6 +100,44 @@ class logger_t(logger_base_t):
94
100
  if self.exit_on_error:
95
101
  self.exit_on_critical = True
96
102
 
103
+ def SetLevel(
104
+ self,
105
+ level: int,
106
+ /,
107
+ *,
108
+ which: handler_codes_h | str = "a",
109
+ ) -> None:
110
+ """
111
+ Set level of handlers, but the logger level is not modified.
112
+
113
+ which: if not a handler_codes_h, then it corresponds to a handler name.
114
+ """
115
+ found = False
116
+ for handler in self.handlers:
117
+ if (
118
+ (which == "a")
119
+ or ((which in "cfg") and (getattr(handler, "kind", None) == which))
120
+ or (which == handler.name)
121
+ ):
122
+ handler.setLevel(level)
123
+ if which not in HANDLER_KINDS:
124
+ return
125
+ found = True
126
+
127
+ if not found:
128
+ raise ValueError(
129
+ MessageWithActualExpected(
130
+ "Handler not found",
131
+ actual=which,
132
+ expected=f"{str(HANDLER_KINDS)[1:-1]}, or a handler name",
133
+ )
134
+ )
135
+
136
+ def MakeRich(self, *, alternating_lines: int = 2) -> None:
137
+ """"""
138
+ OverrideExceptionFormat()
139
+ AddRichConsoleHandler(self, alternating_lines=alternating_lines)
140
+
97
141
  def ResetEventCounts(self) -> None:
98
142
  """"""
99
143
  for level in self.events:
@@ -105,21 +149,21 @@ class logger_t(logger_base_t):
105
149
  handlers yet.
106
150
  """
107
151
  if self.intercepted_wrn_handle is None:
108
- logger = lggg.getLogger(WARNING_LOGGER_NAME)
152
+ logger = l.getLogger(WARNING_LOGGER_NAME)
109
153
  self.intercepted_wrn_handle = logger.handle
110
154
  logger.handle = t.MethodType(_HandleForWarnings(self), logger)
111
155
 
112
- lggg.captureWarnings(True)
156
+ l.captureWarnings(True)
113
157
  self.info("Warning Interception: ON")
114
158
 
115
159
  def _DeactivateWarningInterceptions(self) -> None:
116
160
  """"""
117
161
  if self.intercepted_wrn_handle is not None:
118
- logger = lggg.getLogger(WARNING_LOGGER_NAME)
162
+ logger = l.getLogger(WARNING_LOGGER_NAME)
119
163
  logger.handle = self.intercepted_wrn_handle
120
164
  self.intercepted_wrn_handle = None
121
165
 
122
- lggg.captureWarnings(False)
166
+ l.captureWarnings(False)
123
167
  self.info("Warning Interception: OFF")
124
168
 
125
169
  def ToggleWarningInterceptions(self, state: bool, /) -> None:
@@ -134,8 +178,8 @@ class logger_t(logger_base_t):
134
178
  if state:
135
179
  self.ToggleLogInterceptions(False)
136
180
 
137
- all_loggers = [lggg.getLogger()] + [
138
- lggg.getLogger(_nme)
181
+ all_loggers = [l.getLogger()] + [
182
+ l.getLogger(_nme)
139
183
  for _nme in self.manager.loggerDict
140
184
  if _nme not in (self.name, WARNING_LOGGER_NAME)
141
185
  ]
@@ -151,7 +195,7 @@ class logger_t(logger_base_t):
151
195
  self.info(f"Now Intercepting LOGs from: {as_str}")
152
196
  elif self.intercepted_log_handles.__len__() > 0:
153
197
  for name, handle in self.intercepted_log_handles.items():
154
- logger = lggg.getLogger(name)
198
+ logger = l.getLogger(name)
155
199
  logger.handle = handle
156
200
  self.intercepted_log_handles.clear()
157
201
  self.info("Log Interception: OFF")
@@ -174,10 +218,12 @@ class logger_t(logger_base_t):
174
218
 
175
219
  return "?", UNKNOWN_MEMORY_USAGE
176
220
 
177
- def AddHandler(self, handler: lggg.Handler, should_hold_messages: bool, /) -> None:
221
+ def AddHandler(
222
+ self, handler: l.Handler, /, *, should_hold_messages: bool = False
223
+ ) -> None:
178
224
  """"""
179
225
  self.should_hold_messages = should_hold_messages
180
- logger_base_t.addHandler(self, handler)
226
+ base_t.addHandler(self, handler)
181
227
 
182
228
  extension = getattr(handler, "extension", None)
183
229
  if extension is None:
@@ -195,25 +241,25 @@ class logger_t(logger_base_t):
195
241
 
196
242
  self.info(
197
243
  f'New handler "{name}" of type "{type(handler).__name__}" and '
198
- f"level {handler.level}={lggg.getLevelName(handler.level)}{path}",
244
+ f"level {handler.level}={l.getLevelName(handler.level)}{path}",
199
245
  )
200
246
 
201
- def handle(self, record: lggg.LogRecord, /) -> None:
247
+ def handle(self, record: l.LogRecord, /) -> None:
202
248
  """"""
203
249
  elapsed_time, now = ElapsedTime(should_return_now=True)
204
250
 
205
251
  if (self.on_hold.__len__() > 0) and not self.should_hold_messages:
206
252
  for held in self.on_hold:
207
- logger_base_t.handle(self, held)
253
+ base_t.handle(self, held)
208
254
  self.on_hold.clear()
209
255
 
210
256
  if (date := now.date()) != self.last_message_date:
211
257
  self.last_message_date = date
212
258
  # levelno: Added for management by logging.Logger.handle.
213
- date_record = lggg.makeLogRecord(
259
+ date_record = l.makeLogRecord(
214
260
  {
215
261
  "name": self.name,
216
- "levelno": lggg.INFO,
262
+ "levelno": l.INFO,
217
263
  "msg": f"DATE: {date.strftime(DATE_FORMAT)}",
218
264
  SHOW_W_RULE_ATTR: True,
219
265
  }
@@ -221,7 +267,7 @@ class logger_t(logger_base_t):
221
267
  if self.should_hold_messages:
222
268
  self.on_hold.append(date_record)
223
269
  else:
224
- logger_base_t.handle(self, date_record)
270
+ base_t.handle(self, date_record)
225
271
 
226
272
  # When.
227
273
  if now - self.last_message_now > LONG_ENOUGH:
@@ -235,12 +281,12 @@ class logger_t(logger_base_t):
235
281
  # Where.
236
282
  # Memory usage is also stored if there are no handlers yet, just in case.
237
283
  should_store_where = self.any_handler_stores_memory or not self.hasHandlers()
238
- should_show_where = (record.levelno != lggg.INFO) and not hasattr(
284
+ should_show_where = (record.levelno != l.INFO) and not hasattr(
239
285
  record, HIDE_WHERE_ATTR
240
286
  )
241
287
  if should_store_where or should_show_where:
242
288
  module = path_t(record.pathname)
243
- for path in sstm.path:
289
+ for path in s.path:
244
290
  if module.is_relative_to(path):
245
291
  module = module.relative_to(path).with_suffix("")
246
292
  module = str(module).replace(FOLDER_SEPARATOR, ".")
@@ -263,14 +309,14 @@ class logger_t(logger_base_t):
263
309
  if self.should_hold_messages:
264
310
  self.on_hold.append(record)
265
311
  else:
266
- logger_base_t.handle(self, record)
312
+ base_t.handle(self, record)
267
313
 
268
- if (self.exit_on_critical and (record.levelno is lggg.CRITICAL)) or (
269
- self.exit_on_error and (record.levelno is lggg.ERROR)
314
+ if (self.exit_on_critical and (record.levelno is l.CRITICAL)) or (
315
+ self.exit_on_error and (record.levelno is l.ERROR)
270
316
  ):
271
- # Also works if self.exit_on_error and record.levelno is lggg.CRITICAL since
317
+ # Also works if self.exit_on_error and record.levelno is l.CRITICAL since
272
318
  # __post_init__ set self.exit_on_critical if self.exit_on_error.
273
- sstm.exit(1)
319
+ s.exit(1)
274
320
 
275
321
  self.events[record.levelno] += 1
276
322
 
@@ -282,7 +328,7 @@ class logger_t(logger_base_t):
282
328
  message: str,
283
329
  /,
284
330
  *,
285
- level: int | str = lggg.ERROR,
331
+ level: int | str = l.ERROR,
286
332
  actual: h.Any = NOT_PASSED,
287
333
  expected: h.Any | None = None,
288
334
  expected_is_choices: bool = False,
@@ -291,7 +337,7 @@ class logger_t(logger_base_t):
291
337
  ) -> None:
292
338
  """"""
293
339
  if isinstance(level, str):
294
- level = lggg.getLevelNamesMapping()[level.upper()]
340
+ level = l.getLevelNamesMapping()[level.upper()]
295
341
  message = MessageWithActualExpected(
296
342
  message,
297
343
  actual=actual,
@@ -307,12 +353,12 @@ class logger_t(logger_base_t):
307
353
  exception: Exception,
308
354
  /,
309
355
  *,
310
- level: int | str = lggg.ERROR,
356
+ level: int | str = l.ERROR,
311
357
  should_remove_caller: bool = False,
312
358
  ) -> None:
313
359
  """"""
314
360
  if isinstance(level, str):
315
- level = lggg.getLevelNamesMapping()[level.upper()]
361
+ level = l.getLevelNamesMapping()[level.upper()]
316
362
  lines = tcbk.format_exception(exception)
317
363
  if should_remove_caller:
318
364
  message = "\n".join(lines[:1] + lines[2:])
@@ -359,7 +405,7 @@ class logger_t(logger_base_t):
359
405
  message: str,
360
406
  /,
361
407
  *,
362
- level: int = lggg.ERROR,
408
+ level: int = l.ERROR,
363
409
  actual: h.Any = NOT_PASSED,
364
410
  expected: h.Any | None = None,
365
411
  expected_is_choices: bool = False,
@@ -454,10 +500,10 @@ class logger_t(logger_base_t):
454
500
  return False
455
501
 
456
502
 
457
- def _HandleForWarnings(interceptor: logger_base_t, /) -> logger_handle_h:
503
+ def _HandleForWarnings(interceptor: base_t, /) -> logger_handle_h:
458
504
  """"""
459
505
 
460
- def handle_p(_: logger_base_t, record: lggg.LogRecord, /) -> None:
506
+ def handle_p(_: base_t, record: l.LogRecord, /) -> None:
461
507
  pieces = WARNING_TYPE_COMPILED_PATTERN.match(record.msg)
462
508
  if pieces is None:
463
509
  # The warning message does not follow the default format.
@@ -470,7 +516,7 @@ def _HandleForWarnings(interceptor: logger_base_t, /) -> logger_handle_h:
470
516
  kind = GetPiece(3)
471
517
  message = GetPiece(4).strip()
472
518
 
473
- duplicate = lggg.makeLogRecord(record.__dict__)
519
+ duplicate = l.makeLogRecord(record.__dict__)
474
520
  duplicate.msg = f"{kind}: {message}"
475
521
  duplicate.pathname = path
476
522
  duplicate.module = path_t(path).stem
@@ -483,12 +529,12 @@ def _HandleForWarnings(interceptor: logger_base_t, /) -> logger_handle_h:
483
529
 
484
530
 
485
531
  def _HandleForInterceptions(
486
- intercepted: logger_base_t, interceptor: logger_base_t, /
532
+ intercepted: base_t, interceptor: base_t, /
487
533
  ) -> logger_handle_h:
488
534
  """"""
489
535
 
490
- def handle_p(_: logger_base_t, record: lggg.LogRecord, /) -> None:
491
- duplicate = lggg.makeLogRecord(record.__dict__)
536
+ def handle_p(_: base_t, record: l.LogRecord, /) -> None:
537
+ duplicate = l.makeLogRecord(record.__dict__)
492
538
  duplicate.msg = f"{record.msg} :{intercepted.name}:"
493
539
  interceptor.handle(duplicate)
494
540
 
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.4"
7
+ __version__ = "2025.6"
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.4
3
+ Version: 2025.6
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,52 @@
1
+ logger_36/__init__.py,sha256=3BtAgxFb14e9zzC5fXwqSQxstsd3BO0b_KVu3_wbLwg,2592
2
+ logger_36/content.py,sha256=clHYYUKa8n4qef6PVlUV4mFHRRf6fnm9wEd2fu9oagA,2381
3
+ logger_36/exception.py,sha256=YNT4S_gvz7WQUSWILFAwI01h5-BVw1d0oT97zjnw3dU,4575
4
+ logger_36/gpu.py,sha256=BOumedCAPWvCo7J-KJ3XE-jr5S0KSmgcFv_S4QKRPO8,2252
5
+ logger_36/handler.py,sha256=hEKhfsKHhg8UqSrBTVe7w0lubf9SSkuGMi81oXwjPoo,6326
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=eAXepMLNtMw0muvMucofZ1LJ6BBOIZKujqvtOs93Qho,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=tLMroj95xt_IC9Vra4M5TCDRKrU4mSkfvUg9GliQ_l8,4402
16
+ logger_36/catalog/handler/console_rich.py,sha256=gkRnbhwyFFrS4nGvgUn9lElh7YNCAaC2-7dAex5bHzI,8592
17
+ logger_36/catalog/handler/file.py,sha256=hCb21GahjeRbBJGtPsa2PPme7LmlZ8ftF3Q_BMKRiA8,4865
18
+ logger_36/catalog/handler/generic.py,sha256=Y6rxfKkWe9cA196ntt6p0_rcjEeESGFCKWVlo1WIzW0,9335
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/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=2B4OU7RqpUe98-pY9fadfnW8aFwxtsLSRGKkBtGWn-k,5686
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=vkf-HivFb4VqV2GeOPVqMAp99krtziI-kXhox3UVnzw,2873
43
+ logger_36/task/measure/chronos.py,sha256=1kVhu6jZlNAtNWQQh8ZVuRwZIAC9gGz3_ul1tn0t4Yw,3055
44
+ logger_36/task/measure/memory.py,sha256=OjU5EYFH8SnzlCQKAoiXvauUlwQYOrH34jFXTVYF0jE,2517
45
+ logger_36/type/handler.py,sha256=7M8f8U-zedzo-1AR7iIxHnzRHsuDj9IM0WtrqG2GMY0,6902
46
+ logger_36/type/issue.py,sha256=2rGsFqaQJCbeml9xN08mN_nK79L8qscaS_0ws36Y0bI,3214
47
+ logger_36/type/logger.py,sha256=4cCa-u1ktDdlj96aOWz6OsDJ_WhuN7eKEEALIHDS9NY,20451
48
+ logger_36/type/loggers.py,sha256=znqxWBnfQxvkg3VUfbTUvt3S6Kq0DAzWWepxQDt9suI,2871
49
+ logger_36-2025.6.dist-info/METADATA,sha256=AQ37dDMn1ZG7E3X5x29OR4_GaeG_FWcVkjew0B9hbzw,6505
50
+ logger_36-2025.6.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
51
+ logger_36-2025.6.dist-info/top_level.txt,sha256=sM95BTMWmslEEgR_1pzwZsOeSp8C_QBiu8ImbFr0XLc,10
52
+ logger_36-2025.6.dist-info/RECORD,,
@@ -1,52 +0,0 @@
1
- logger_36/__init__.py,sha256=R2KOBgWqAFZz7wZXXlRu32B0e1-jJtbnJvzKueCoPjw,2596
2
- logger_36/content.py,sha256=ni9gdYYNZoDa91KNianWBluOBe9KxZMZtzalcBS6vhE,2357
3
- logger_36/exception.py,sha256=URyi0OX9fh7QAyJ6eVbHW8mO_RDrBoWIcqvB_h2FBNo,3429
4
- logger_36/gpu.py,sha256=YYFk6aYQrBDJfxQaDm-ar16T6SlOSL6jJWTOgvpF4EU,2244
5
- logger_36/handler.py,sha256=vg8LOD0YzGQxyoKB7qr7c4rueRwp-sDF1svDHwffumg,6565
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=TmuyLb-2leESnpcl63Z0hezoJcxGma4k4K_pW7TL6SI,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=iyPFozVpw18qkRTBovhb2X2WM93MW5QqgwGQDSzUijI,2866
14
- logger_36/catalog/handler/console.py,sha256=KL8oGdtQUUE8I5Pc_5wmD1MdDSw8E7dpybkzmFWKRUY,4247
15
- logger_36/catalog/handler/console_rich.py,sha256=J1qb9Dd_GVKxGoDUw8ibg54YjR0pgaDo6evR9IUzYT8,8376
16
- logger_36/catalog/handler/file.py,sha256=Ryb8ZMutOYgLmcNszK25yc9MqRn2qu6ACzvjNoeVxiA,4711
17
- logger_36/catalog/handler/generic.py,sha256=ntHrrRg4nb7LPjfwxM9U7AFj-azubrCuFYJKlhJ6el8,9144
18
- logger_36/catalog/logger/chronos.py,sha256=7_Y_HxRHwwHyjOb2v4Y3CxMGCaJBWm7q8wlw05jZGvs,2447
19
- logger_36/catalog/logger/gpu.py,sha256=KYCQN2wD9sxzUrcVS9633h0BmvaFMW-aniA6QK50H2g,3423
20
- logger_36/catalog/logger/memory.py,sha256=xVPzFPL0v0X2yyjqxA3YIb8CGB2VMP0qz9c_PILatlE,4700
21
- logger_36/catalog/logger/system.py,sha256=WRDlh0tr8NYp6AeVjLkmzuBMwtJxSokl4_mMJRH9OBU,3076
22
- logger_36/config/issue.py,sha256=G-i5p6lhZCLAOa-VTMyL9ZonvGCvhdoQ5KZdSWgP-FU,2267
23
- logger_36/config/logger.py,sha256=9vQ8m1sJsK8tjnh5SZEKzofqeVJbsULTm-ev2rk0x7M,3760
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=biZ-sE3PzwD2oV1qJ2epNN79BETMq7XOvgRAccqHhVQ,2676
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=ttKjl9MD7FUjqCWjv5w2hmmpDYxgaORcYf9NaaE9W_M,2246
37
- logger_36/instance/loggers.py,sha256=RCWpC1NPAf6vXnFc9NqsSALv-x-FEzcH6k_OlxTxeQk,2251
38
- logger_36/task/inspection.py,sha256=f9VkVrwMJ_ixV9rFu3XUNpmCbEgoo1tssqd2nMeGYLI,5028
39
- logger_36/task/storage.py,sha256=rMqcVieK9KUEqE3fZWu2M1K99KCVzjsB4baUph5ITbs,5700
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=bgF_VQ65bpwloZ_uqN8N-hQPnUGgWV-u_vdodbwi59g,3061
44
- logger_36/task/measure/memory.py,sha256=-V9UDFlDwmtUlfBzovcMgmsaYxwyoE1YmfXjXZ2iuNc,2512
45
- logger_36/type/handler.py,sha256=HJ547swaN1bdxnxoU4cIinWUkww3YAQ1vYgtugWk5X4,6474
46
- logger_36/type/issue.py,sha256=p2upR8vAXPkrnSwPuM3R1hmTkRwJwL1e658L6WwSWfQ,3220
47
- logger_36/type/logger.py,sha256=tnA8T4W54HL9iV_0NiS_bLpq8fDj5bGYhl_ge96unVI,19136
48
- logger_36/type/loggers.py,sha256=znqxWBnfQxvkg3VUfbTUvt3S6Kq0DAzWWepxQDt9suI,2871
49
- logger_36-2025.4.dist-info/METADATA,sha256=34fPgMxKwPHoc-9v1YUus_suCITsZPzxiY7BW9wG3GY,6505
50
- logger_36-2025.4.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
51
- logger_36-2025.4.dist-info/top_level.txt,sha256=sM95BTMWmslEEgR_1pzwZsOeSp8C_QBiu8ImbFr0XLc,10
52
- logger_36-2025.4.dist-info/RECORD,,