logger-36 2024.21__py3-none-any.whl → 2024.22__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.
@@ -9,6 +9,8 @@ import typing as h
9
9
  order_h = h.Literal["when", "context"]
10
10
  ORDER: tuple[str, ...] = h.get_args(order_h)
11
11
 
12
+ ISSUE_LEVEL_SEPARATOR = "#"
13
+
12
14
  """
13
15
  COPYRIGHT NOTICE
14
16
 
logger_36/type/issue.py CHANGED
@@ -4,10 +4,12 @@ Contributor(s): Eric Debreuve (eric.debreuve@cnrs.fr) since 2023
4
4
  SEE COPYRIGHT NOTICE BELOW
5
5
  """
6
6
 
7
+ import logging as lggg
7
8
  import typing as h
8
9
 
9
10
  from logger_36.config.issue import ISSUE_BASE_CONTEXT
10
11
  from logger_36.constant.generic import NOT_PASSED
12
+ from logger_36.constant.issue import ISSUE_LEVEL_SEPARATOR
11
13
  from logger_36.constant.message import expected_op_h
12
14
  from logger_36.task.format.message import FormattedMessage
13
15
 
@@ -20,6 +22,7 @@ def NewIssue(
20
22
  message: str,
21
23
  /,
22
24
  *,
25
+ level: int = lggg.ERROR,
23
26
  actual: h.Any = NOT_PASSED,
24
27
  expected: h.Any | None = None,
25
28
  expected_op: expected_op_h = "=",
@@ -36,7 +39,7 @@ def NewIssue(
36
39
  with_final_dot=with_final_dot,
37
40
  )
38
41
 
39
- return f"{context}{separator}{message}"
42
+ return f"{level}{ISSUE_LEVEL_SEPARATOR}{context}{separator}{message}"
40
43
 
41
44
 
42
45
  """
logger_36/type/logger.py CHANGED
@@ -17,7 +17,7 @@ from traceback import TracebackException as traceback_t
17
17
  from logger_36.config.issue import ISSUE_CONTEXT_END, ISSUE_CONTEXT_SEPARATOR
18
18
  from logger_36.config.message import DATE_FORMAT
19
19
  from logger_36.constant.generic import NOT_PASSED
20
- from logger_36.constant.issue import ORDER, order_h
20
+ from logger_36.constant.issue import ISSUE_LEVEL_SEPARATOR, ORDER, order_h
21
21
  from logger_36.constant.logger import (
22
22
  HIDE_WHERE_KWARG,
23
23
  LOGGER_NAME,
@@ -221,11 +221,12 @@ class logger_t(lggg.Logger):
221
221
  # __post_init__ set self.exit_on_critical if self.exit_on_error.
222
222
  sstm.exit(1)
223
223
 
224
- def error_for_exception(
224
+ def log_exception(
225
225
  self,
226
226
  exception: Exception,
227
227
  /,
228
228
  *,
229
+ level: int = lggg.ERROR,
229
230
  should_remove_caller: bool = False,
230
231
  ) -> None:
231
232
  """"""
@@ -233,9 +234,12 @@ class logger_t(lggg.Logger):
233
234
  if should_remove_caller:
234
235
  message = "\n".join(lines[:1] + lines[2:])
235
236
  else:
237
+ # TODO: Explain:
238
+ # - Why it's not: "\n".join(lines)?
239
+ # - Why adding excpetion name here and not when removing caller?
236
240
  formatted = "".join(lines)
237
241
  message = f"{type(exception).__name__}:\n{formatted}"
238
- self.error(message)
242
+ self.log(level, message)
239
243
 
240
244
  def AddContextLevel(self, new_level: str, /) -> None:
241
245
  """"""
@@ -255,6 +259,7 @@ class logger_t(lggg.Logger):
255
259
  message: str,
256
260
  /,
257
261
  *,
262
+ level: int = lggg.ERROR,
258
263
  actual: h.Any = NOT_PASSED,
259
264
  expected: h.Any | None = None,
260
265
  expected_op: expected_op_h = "=",
@@ -266,6 +271,7 @@ class logger_t(lggg.Logger):
266
271
  context,
267
272
  ISSUE_CONTEXT_END,
268
273
  message,
274
+ level=level,
269
275
  actual=actual,
270
276
  expected=expected,
271
277
  expected_op=expected_op,
@@ -280,12 +286,15 @@ class logger_t(lggg.Logger):
280
286
 
281
287
  def CommitIssues(
282
288
  self,
283
- level: int | type[Exception],
284
289
  /,
285
290
  *,
286
291
  order: order_h = "when",
292
+ unified: bool = False,
287
293
  ) -> None:
288
- """"""
294
+ """
295
+ Note that issues after an issue with a level triggering process exit will not be
296
+ logged.
297
+ """
289
298
  if not self.has_staged_issues:
290
299
  return
291
300
 
@@ -302,22 +311,28 @@ class logger_t(lggg.Logger):
302
311
  issues = self.staged_issues
303
312
  else: # order == "context"
304
313
  issues = sorted(self.staged_issues, key=lambda _elm: _elm.context)
305
- issues = "\n".join(issues)
306
-
307
- if isinstance(level, type) and issubclass(level, Exception):
308
- try:
309
- raise level("\n" + issues)
310
- except Exception as exception:
311
- lines = ["Traceback (most recent call last):"] + tcbk.format_stack()[
312
- :-1
313
- ]
314
- lines[-1] = lines[-1][:-1]
315
- lines.extend(tcbk.format_exception_only(exception))
316
- print("\n".join(lines), file=sstm.stderr)
317
- sstm.exit(1)
318
-
319
- level: int
320
- self.log(level, issues, stacklevel=2)
314
+ """
315
+ Format issues as an exception:
316
+ try:
317
+ raise ValueError("\n" + "\n".join(issues))
318
+ except ValueError as exception:
319
+ lines = ["Traceback (most recent call last):"] + tcbk.format_stack()[:-1]
320
+ lines[-1] = lines[-1][:-1]
321
+ lines.extend(tcbk.format_exception_only(exception))
322
+ formatted = "\n".join(lines)
323
+ """
324
+
325
+ if unified:
326
+ level, _ = issues[0].split(ISSUE_LEVEL_SEPARATOR, maxsplit=1)
327
+ wo_level = []
328
+ for issue in issues:
329
+ _, issue = issue.split(ISSUE_LEVEL_SEPARATOR, maxsplit=1)
330
+ wo_level.append(issue)
331
+ self.log(int(level), "\n".join(wo_level), stacklevel=2)
332
+ else:
333
+ for issue in issues:
334
+ level, issue = issue.split(ISSUE_LEVEL_SEPARATOR, maxsplit=1)
335
+ self.log(int(level), issue, stacklevel=2)
321
336
  self.staged_issues.clear()
322
337
 
323
338
  def ShowMessage(self, message: str, /) -> None:
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__ = "2024.21"
7
+ __version__ = "2024.22"
8
8
 
9
9
  """
10
10
  COPYRIGHT NOTICE
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: logger-36
3
- Version: 2024.21
3
+ Version: 2024.22
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
@@ -5,7 +5,7 @@ logger_36/logger.py,sha256=7LJtdT7TmfFsn6r34iTr6OGvEjXlU6hKXEO2c5Lm2zY,2386
5
5
  logger_36/logger_gpu.py,sha256=YYFk6aYQrBDJfxQaDm-ar16T6SlOSL6jJWTOgvpF4EU,2244
6
6
  logger_36/measure.py,sha256=P507VNbVKAf4jYGnGX-3rlDrVbrYP0ZD3nxFmAFvhyI,2404
7
7
  logger_36/storage.py,sha256=O8pDmiL0B3LJpKrhi8a9IMBXs6MwW6r1bMUn_cSDAaY,2246
8
- logger_36/version.py,sha256=rTDQY_iaCr8FcZO-_ELLxzcbp57fGX9nsGWkY7plJmk,2206
8
+ logger_36/version.py,sha256=JPQbndmeGc-ytruoejhakNRfDt3ogZPJwu9ZkQINvwA,2206
9
9
  logger_36/catalog/config/console_rich.py,sha256=QDkgSs3I7ZULvkd1q4J1hdvgyB857JJcJWxM9fdL51Y,2883
10
10
  logger_36/catalog/handler/console.py,sha256=SF9S3CUoEPp5dh7RrqotywDJjMgRp0rD9sO3eLVXnkA,4004
11
11
  logger_36/catalog/handler/console_rich.py,sha256=Ti1k2E1ox4egzicghTb9Wv30xiWaBbWwe8ouopJsujY,8792
@@ -23,7 +23,7 @@ logger_36/config/system.py,sha256=HD8ZuwsXhEAExeZrww8YoDkQGMs4T5RDqQMb1W4qVgc,24
23
23
  logger_36/constant/error.py,sha256=1gdnCwUu3d3ThL4AKxzjn7ijSTBWlr2g-8cAKbubl4A,2825
24
24
  logger_36/constant/generic.py,sha256=t6aRb66_NHwMhR1p7BZ4QXTU2jpLz-H5YAL4PuMtKx8,2244
25
25
  logger_36/constant/handler.py,sha256=HM8qCSEMGNMCzddjUUNBPGL-3d0qU-EmG5eW4ZQHW6A,2311
26
- logger_36/constant/issue.py,sha256=48c3QGNzgRcvQOenlp77_wAU4znZfLkQEdT2oE_CvMs,2286
26
+ logger_36/constant/issue.py,sha256=01l8itRPWGS5F6gXtsXUJgGR-4lS1Eu3_YeKC-khKLw,2315
27
27
  logger_36/constant/logger.py,sha256=0GhemAQ_YBiRO5WQBuNTczuejyVu2IYCsgqPRIbL8es,2780
28
28
  logger_36/constant/memory.py,sha256=ZL1MwbdtNsrCrOwzEyfTsfOoOsRBTJtbbf3otHGnxXo,2343
29
29
  logger_36/constant/message.py,sha256=RKQL-YmEDds5q7HuHTeDebz7_h3zWDX0PNxu-RTwL2I,2714
@@ -39,10 +39,10 @@ logger_36/task/format/rule.py,sha256=YEe8wG_QLy9vRZqmT2bWlvKT-Dxp4pGaZVmEuwwODyE
39
39
  logger_36/task/measure/chronos.py,sha256=t-y0bVm1SmF-3wI9pR9Bp6-qzVlsE94fZTZr5a_hZUA,2884
40
40
  logger_36/task/measure/memory.py,sha256=eVw5WOYLyn8o4O4mMArdX2MzsVuhhNDovjYEkk-MIaU,2504
41
41
  logger_36/type/handler.py,sha256=BXpevZhLq5V_IdUfi_LZA4czzlH2SGLpgvbqUBe5X10,8311
42
- logger_36/type/issue.py,sha256=cB8pSSJg9aqFPQ6yJr4TC2kJbngKGK8Hyq4ATBm6jAc,2973
43
- logger_36/type/logger.py,sha256=W6U0t_M6juGoc5cGb9vdwk29LhNeg2Sa-VeOKiWJrac,15234
42
+ logger_36/type/issue.py,sha256=5NCcDX8uTcp4Zd7HoRTYB2_f3RVjqHeDEavkssr6bg0,3114
43
+ logger_36/type/logger.py,sha256=sH-eEEt3_kdYSTS4C3sLXA_pp-2MH-D_Bf6EDlJNY1E,15935
44
44
  logger_36/type/loggers.py,sha256=znqxWBnfQxvkg3VUfbTUvt3S6Kq0DAzWWepxQDt9suI,2871
45
- logger_36-2024.21.dist-info/METADATA,sha256=fsvDva8-byjx5YqWdp2yf83uIjNA04WYyBjTcdVAgbY,6276
46
- logger_36-2024.21.dist-info/WHEEL,sha256=HiCZjzuy6Dw0hdX5R3LCFPDmFS4BWl8H-8W39XfmgX4,91
47
- logger_36-2024.21.dist-info/top_level.txt,sha256=sM95BTMWmslEEgR_1pzwZsOeSp8C_QBiu8ImbFr0XLc,10
48
- logger_36-2024.21.dist-info/RECORD,,
45
+ logger_36-2024.22.dist-info/METADATA,sha256=K5YZ0rA-ldUEqGnM3lMh09FzH9fmEY7gTZC7eWyTpcE,6276
46
+ logger_36-2024.22.dist-info/WHEEL,sha256=cVxcB9AmuTcXqmwrtPhNK88dr7IR_b6qagTj0UvIEbY,91
47
+ logger_36-2024.22.dist-info/top_level.txt,sha256=sM95BTMWmslEEgR_1pzwZsOeSp8C_QBiu8ImbFr0XLc,10
48
+ logger_36-2024.22.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (72.2.0)
2
+ Generator: setuptools (74.1.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5