logger-36 2024.19__py3-none-any.whl → 2024.21__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.
@@ -58,7 +58,10 @@ class console_handler_t(lggg.Handler):
58
58
  print(message)
59
59
 
60
60
  def ShowMessage(self, message: str, /) -> None:
61
- """"""
61
+ """
62
+ See documentation of
63
+ logger_36.catalog.handler.generic.generic_handler_t.ShowMessage.
64
+ """
62
65
  print(message)
63
66
 
64
67
 
@@ -155,7 +155,10 @@ class console_rich_handler_t(lggg.Handler):
155
155
  self.console.print(richer, crop=False, overflow="ignore")
156
156
 
157
157
  def ShowMessage(self, message: str, /) -> None:
158
- """"""
158
+ """
159
+ See documentation of
160
+ logger_36.catalog.handler.generic.generic_handler_t.ShowMessage.
161
+ """
159
162
  self.console.print(message, crop=False, overflow="ignore")
160
163
 
161
164
 
@@ -68,7 +68,10 @@ class file_handler_t(lggg.FileHandler):
68
68
  self.stream.flush()
69
69
 
70
70
  def ShowMessage(self, message: str, /) -> None:
71
- """"""
71
+ """
72
+ See documentation of
73
+ logger_36.catalog.handler.generic.generic_handler_t.ShowMessage.
74
+ """
72
75
  print(message, file=self.stream)
73
76
  self.stream.flush()
74
77
 
@@ -23,31 +23,35 @@ from logger_36.task.format.rule import Rule, RuleAsText
23
23
  from logger_36.type.handler import handler_extension_t
24
24
 
25
25
 
26
- class can_show_message_p(h.Protocol):
27
- def ShowMessage(self, message: str, /) -> None: ...
28
-
29
-
30
- interface_h = can_show_message_p | h.Callable[[str], None]
31
-
32
-
33
26
  @d.dataclass(slots=True, repr=False, eq=False)
34
27
  class generic_handler_t(lggg.Handler):
35
28
  """
36
29
  alternating_lines:
37
- - Initial value:
38
- - 1: enabled for dark background
39
- - 2: enabled for light background
40
- - anything else: disabled
41
- - Runtime value: 0/1=do not/do highlight next time.
30
+ - Initial value:
31
+ - 1: enabled for dark background
32
+ - 2: enabled for light background
33
+ - anything else: disabled
34
+ - Runtime value: 0/1=do not/do highlight next time.
35
+
36
+ ShowMessage:
37
+ Log a message as is, i.e. without formatting. If this is a method, it should
38
+ contain the same call(s) as the final ones in the emit methods that are used to
39
+ output the formatted log messages. This means that there is some code
40
+ duplication, but it avoids a (maybe negligible) slowing down that would arise
41
+ from calling this method at the end of the emit methods.
42
+ Here, since, by definition, the generic handler does not know how to output
43
+ messages, it is a callable attribute that must be set at instantiation time, and
44
+ it is indeed called at the end of the emit method.
42
45
  """
43
46
 
44
- extension: handler_extension_t = d.field(init=False)
47
+ ShowMessage: h.Callable[[str], None]
45
48
  console: console_t = None
46
49
  console_options: console_options_t = None
47
- FormattedLines: h.Callable[..., tuple[str, str | None]] = d.field(init=False)
48
50
  alternating_lines: int = 0
49
51
  background_is_light: bool = True
50
- ShowMessage: h.Callable[[str], None] = lambda _arg: None
52
+
53
+ extension: handler_extension_t = d.field(init=False)
54
+ FormattedLines: h.Callable[..., tuple[str, str | None]] = d.field(init=False)
51
55
 
52
56
  name: d.InitVar[str | None] = None
53
57
  level: d.InitVar[int] = lggg.NOTSET
@@ -57,9 +61,8 @@ class generic_handler_t(lggg.Handler):
57
61
  formatter: d.InitVar[lggg.Formatter | None] = None
58
62
 
59
63
  supports_html: d.InitVar[bool] = False
60
- should_record: d.InitVar[bool] = (False,)
64
+ should_record: d.InitVar[bool] = False
61
65
  rich_kwargs: d.InitVar[dict[str, h.Any] | None] = None
62
- interface: d.InitVar[interface_h | None] = None # Cannot be None actually.
63
66
 
64
67
  def __post_init__(
65
68
  self,
@@ -72,7 +75,6 @@ class generic_handler_t(lggg.Handler):
72
75
  supports_html: bool,
73
76
  should_record: bool,
74
77
  rich_kwargs: dict[str, h.Any] | None,
75
- interface: interface_h | None,
76
78
  ) -> None:
77
79
  """"""
78
80
  lggg.Handler.__init__(self)
@@ -110,10 +112,6 @@ class generic_handler_t(lggg.Handler):
110
112
  else:
111
113
  self.alternating_lines = -1
112
114
 
113
- self.ShowMessage = getattr(
114
- interface, can_show_message_p.ShowMessage.__name__, interface
115
- )
116
-
117
115
  def emit(self, record: lggg.LogRecord, /) -> None:
118
116
  """"""
119
117
  if self.console is None:
logger_36/handler.py CHANGED
@@ -6,11 +6,12 @@ SEE COPYRIGHT NOTICE BELOW
6
6
 
7
7
  import logging as lggg
8
8
  import sys as sstm
9
+ import typing as h
9
10
  from pathlib import Path as path_t
10
11
 
11
12
  from logger_36.catalog.handler.console import console_handler_t
12
13
  from logger_36.catalog.handler.file import file_handler_t
13
- from logger_36.catalog.handler.generic import generic_handler_t, interface_h
14
+ from logger_36.catalog.handler.generic import generic_handler_t
14
15
  from logger_36.constant.error import MISSING_RICH_ERROR
15
16
  from logger_36.instance.logger import LOGGER
16
17
 
@@ -27,7 +28,7 @@ except ModuleNotFoundError:
27
28
 
28
29
 
29
30
  def AddGenericHandler(
30
- interface: interface_h,
31
+ ShowMessage: h.Callable[[str], None],
31
32
  /,
32
33
  *,
33
34
  logger: lggg.Logger | None = None,
@@ -58,7 +59,7 @@ def AddGenericHandler(
58
59
  alternating_lines=alternating_lines,
59
60
  should_record=should_record,
60
61
  rich_kwargs=kwargs,
61
- interface=interface,
62
+ ShowMessage=ShowMessage,
62
63
  )
63
64
  logger.AddHandler(handler, should_hold_messages)
64
65
 
logger_36/logger.py CHANGED
@@ -5,7 +5,6 @@ SEE COPYRIGHT NOTICE BELOW
5
5
  """
6
6
 
7
7
  from logger_36.catalog.logger.chronos import LogElapsedTime
8
- from logger_36.catalog.logger.exception import LogException
9
8
  from logger_36.catalog.logger.memory import LogMaximumMemoryUsage, LogMemoryUsages
10
9
  from logger_36.catalog.logger.system import LogSystemDetails
11
10
 
logger_36/type/logger.py CHANGED
@@ -7,7 +7,7 @@ SEE COPYRIGHT NOTICE BELOW
7
7
  import dataclasses as d
8
8
  import logging as lggg
9
9
  import sys as sstm
10
- import traceback as tbck
10
+ import traceback as tcbk
11
11
  import types as t
12
12
  import typing as h
13
13
  from datetime import datetime as dttm
@@ -221,6 +221,22 @@ 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(
225
+ self,
226
+ exception: Exception,
227
+ /,
228
+ *,
229
+ should_remove_caller: bool = False,
230
+ ) -> None:
231
+ """"""
232
+ lines = tcbk.format_exception(exception)
233
+ if should_remove_caller:
234
+ message = "\n".join(lines[:1] + lines[2:])
235
+ else:
236
+ formatted = "".join(lines)
237
+ message = f"{type(exception).__name__}:\n{formatted}"
238
+ self.error(message)
239
+
224
240
  def AddContextLevel(self, new_level: str, /) -> None:
225
241
  """"""
226
242
  self.context_levels.append(new_level)
@@ -292,11 +308,11 @@ class logger_t(lggg.Logger):
292
308
  try:
293
309
  raise level("\n" + issues)
294
310
  except Exception as exception:
295
- lines = ["Traceback (most recent call last):"] + tbck.format_stack()[
311
+ lines = ["Traceback (most recent call last):"] + tcbk.format_stack()[
296
312
  :-1
297
313
  ]
298
314
  lines[-1] = lines[-1][:-1]
299
- lines.extend(tbck.format_exception_only(exception))
315
+ lines.extend(tcbk.format_exception_only(exception))
300
316
  print("\n".join(lines), file=sstm.stderr)
301
317
  sstm.exit(1)
302
318
 
@@ -305,7 +321,10 @@ class logger_t(lggg.Logger):
305
321
  self.staged_issues.clear()
306
322
 
307
323
  def ShowMessage(self, message: str, /) -> None:
308
- """"""
324
+ """
325
+ See documentation of
326
+ logger_36.catalog.handler.generic.generic_handler_t.ShowMessage.
327
+ """
309
328
  for handler in self.handlers:
310
329
  ShowMessage = getattr(handler, "ShowMessage", None)
311
330
  if ShowMessage is not 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.19"
7
+ __version__ = "2024.21"
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.19
3
+ Version: 2024.21
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
@@ -1,18 +1,17 @@
1
1
  logger_36/__init__.py,sha256=jHidpp6dmfJVdoiHkwTXBn1_u1HRaZj3BHS8jq71ZOE,2312
2
2
  logger_36/format.py,sha256=mox36RRkNUWbeHo3XkGGlik2CoyswDvDehRDtZkrnD0,2558
3
- logger_36/handler.py,sha256=wHMj4OyQrUdhAxk_MCvPTBT1Ig3BYpfbqxHYfp91fOU,6697
4
- logger_36/logger.py,sha256=flRcn5-2L7yGfJusfnkQXzFQcX3Ljt-1_KWnA_I0new,2446
3
+ logger_36/handler.py,sha256=9KUu02RpKGKBR358gqS5G1Zut5C6MyBgGzRsQYFBAtY,6721
4
+ 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=pk3jW0gVcV0DVsZOCeVxbuluEwh3R_zjxpQerFhYt0Q,2206
8
+ logger_36/version.py,sha256=rTDQY_iaCr8FcZO-_ELLxzcbp57fGX9nsGWkY7plJmk,2206
9
9
  logger_36/catalog/config/console_rich.py,sha256=QDkgSs3I7ZULvkd1q4J1hdvgyB857JJcJWxM9fdL51Y,2883
10
- logger_36/catalog/handler/console.py,sha256=1WLtmxZCBj0AxLu5xey3VIVBKm02bp-Rc-eZOiFtXnU,3893
11
- logger_36/catalog/handler/console_rich.py,sha256=v57EFAvCaH5ABoZ24lFn1ObCe_EntHpqzW7RJLs6Lik,8681
12
- logger_36/catalog/handler/file.py,sha256=GS5nsfp0j0mzPak7vz8E7U4e5H95os_qfDjdM1Ywf0g,4345
13
- logger_36/catalog/handler/generic.py,sha256=IwHOE_KhviuJJKCp8-LU86X90Mp0HJO5V5fhiOhfN98,8126
10
+ logger_36/catalog/handler/console.py,sha256=SF9S3CUoEPp5dh7RrqotywDJjMgRp0rD9sO3eLVXnkA,4004
11
+ logger_36/catalog/handler/console_rich.py,sha256=Ti1k2E1ox4egzicghTb9Wv30xiWaBbWwe8ouopJsujY,8792
12
+ logger_36/catalog/handler/file.py,sha256=z5ovaOxemh61pbWDCK2sMMlbd1TKwGjMiQhgoicilm4,4456
13
+ logger_36/catalog/handler/generic.py,sha256=wG6Z1-lHj_9o6cPurEVpPctFlec3BFeqx2mZU_krJt8,8379
14
14
  logger_36/catalog/logger/chronos.py,sha256=eLqQw8N9vaGO23OCf5RrYDPbUeu7epUvDt9rH-dN7i0,2522
15
- logger_36/catalog/logger/exception.py,sha256=sL7sZ_bjNoof2xgOXvBzAi2xHrj7Pmjfkfhjzuy6NGs,2708
16
15
  logger_36/catalog/logger/gpu.py,sha256=vUFSP17e7U4nenMi5IMlDiP3cZvXe6nqEDpoqzTavdg,3490
17
16
  logger_36/catalog/logger/memory.py,sha256=Zel_UCnHqGAqf_YuKpvjt0OIOo9vwKYpFM9g_2bjir0,4790
18
17
  logger_36/catalog/logger/system.py,sha256=FQ3w1zIN1ab6y8QYtcYDULhyJYy4iwTwHoDs8Mi2IdQ,3159
@@ -41,9 +40,9 @@ logger_36/task/measure/chronos.py,sha256=t-y0bVm1SmF-3wI9pR9Bp6-qzVlsE94fZTZr5a_
41
40
  logger_36/task/measure/memory.py,sha256=eVw5WOYLyn8o4O4mMArdX2MzsVuhhNDovjYEkk-MIaU,2504
42
41
  logger_36/type/handler.py,sha256=BXpevZhLq5V_IdUfi_LZA4czzlH2SGLpgvbqUBe5X10,8311
43
42
  logger_36/type/issue.py,sha256=cB8pSSJg9aqFPQ6yJr4TC2kJbngKGK8Hyq4ATBm6jAc,2973
44
- logger_36/type/logger.py,sha256=GaZQQDy6B0_5x2yOrV7r3W9ib7egSRQJCFRE_DpALYw,14669
43
+ logger_36/type/logger.py,sha256=W6U0t_M6juGoc5cGb9vdwk29LhNeg2Sa-VeOKiWJrac,15234
45
44
  logger_36/type/loggers.py,sha256=znqxWBnfQxvkg3VUfbTUvt3S6Kq0DAzWWepxQDt9suI,2871
46
- logger_36-2024.19.dist-info/METADATA,sha256=p3u2INogEHx1jOHYVd6Qja2EmVeA-qe5dM2rcVuOfXc,6276
47
- logger_36-2024.19.dist-info/WHEEL,sha256=-oYQCr74JF3a37z2nRlQays_SX2MqOANoqVjBBAP2yE,91
48
- logger_36-2024.19.dist-info/top_level.txt,sha256=sM95BTMWmslEEgR_1pzwZsOeSp8C_QBiu8ImbFr0XLc,10
49
- logger_36-2024.19.dist-info/RECORD,,
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,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (71.0.3)
2
+ Generator: setuptools (72.2.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,74 +0,0 @@
1
- """
2
- Copyright CNRS/Inria/UniCA
3
- Contributor(s): Eric Debreuve (eric.debreuve@cnrs.fr) since 2023
4
- SEE COPYRIGHT NOTICE BELOW
5
- """
6
-
7
- import traceback as tcbk
8
-
9
- from logger_36.instance.logger import LOGGER
10
- from logger_36.type.logger import logger_t
11
-
12
-
13
- def LogException(
14
- exception: Exception,
15
- /,
16
- *,
17
- logger: logger_t = LOGGER,
18
- should_remove_caller: bool = False,
19
- ) -> None:
20
- """"""
21
- lines = tcbk.format_exception(exception)
22
- if should_remove_caller:
23
- message = "\n".join(lines[:1] + lines[2:])
24
- else:
25
- formatted = "".join(lines)
26
- message = f"{type(exception).__name__}:\n{formatted}"
27
- logger.error(message)
28
-
29
-
30
- """
31
- COPYRIGHT NOTICE
32
-
33
- This software is governed by the CeCILL license under French law and
34
- abiding by the rules of distribution of free software. You can use,
35
- modify and/ or redistribute the software under the terms of the CeCILL
36
- license as circulated by CEA, CNRS and INRIA at the following URL
37
- "http://www.cecill.info".
38
-
39
- As a counterpart to the access to the source code and rights to copy,
40
- modify and redistribute granted by the license, users are provided only
41
- with a limited warranty and the software's author, the holder of the
42
- economic rights, and the successive licensors have only limited
43
- liability.
44
-
45
- In this respect, the user's attention is drawn to the risks associated
46
- with loading, using, modifying and/or developing or reproducing the
47
- software by the user in light of its specific status of free software,
48
- that may mean that it is complicated to manipulate, and that also
49
- therefore means that it is reserved for developers and experienced
50
- professionals having in-depth computer knowledge. Users are therefore
51
- encouraged to load and test the software's suitability as regards their
52
- requirements in conditions enabling the security of their systems and/or
53
- data to be ensured and, more generally, to use and operate it in the
54
- same conditions as regards security.
55
-
56
- The fact that you are presently reading this means that you have had
57
- knowledge of the CeCILL license and that you accept its terms.
58
-
59
- SEE LICENCE NOTICE: file README-LICENCE-utf8.txt at project source root.
60
-
61
- This software is being developed by Eric Debreuve, a CNRS employee and
62
- member of team Morpheme.
63
- Team Morpheme is a joint team between Inria, CNRS, and UniCA.
64
- It is hosted by the Centre Inria d'Université Côte d'Azur, Laboratory
65
- I3S, and Laboratory iBV.
66
-
67
- CNRS: https://www.cnrs.fr/index.php/en
68
- Inria: https://www.inria.fr/en/
69
- UniCA: https://univ-cotedazur.eu/
70
- Centre Inria d'Université Côte d'Azur: https://www.inria.fr/en/centre/sophia/
71
- I3S: https://www.i3s.unice.fr/en/
72
- iBV: http://ibv.unice.fr/
73
- Team Morpheme: https://team.inria.fr/morpheme/
74
- """