logger-36 2025.25__tar.gz → 2025.27__tar.gz
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-2025.25 → logger_36-2025.27}/PKG-INFO +1 -1
- {logger_36-2025.25 → logger_36-2025.27}/documentation/wiki/description.asciidoc +1 -15
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/catalog/handler/console_rich.py +8 -9
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/catalog/handler/generic.py +1 -1
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/extension/line.py +1 -3
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/type/handler.py +1 -1
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/type/logger.py +31 -26
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/type/loggers.py +0 -2
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/version.py +1 -1
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36.egg-info/PKG-INFO +1 -1
- {logger_36-2025.25 → logger_36-2025.27}/MANIFEST.in +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/README-COPYRIGHT-utf8.txt +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/README-LICENCE-utf8.txt +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/README.rst +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/__init__.py +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/api/chronos.py +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/api/logger.py +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/api/memory.py +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/api/message.py +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/api/storage.py +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/catalog/config/console_rich.py +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/catalog/config/optional.py +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/catalog/handler/console.py +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/catalog/handler/file.py +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/catalog/handler/memory.py +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/catalog/logger/chronos.py +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/catalog/logger/gpu.py +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/catalog/logger/memory.py +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/catalog/logger/system.py +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/config/issue.py +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/config/memory.py +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/config/message.py +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/config/rule.py +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/config/system.py +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/constant/chronos.py +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/constant/error.py +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/constant/html.py +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/constant/issue.py +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/constant/logger.py +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/constant/memory.py +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/constant/message.py +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/constant/path.py +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/constant/record.py +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/constant/rule.py +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/constant/system.py +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/extension/file.py +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/extension/inspection.py +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/extension/sentinel.py +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/instance/logger.py +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/instance/loggers.py +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/task/format/memory.py +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/task/format/message.py +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/task/measure/chronos.py +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/task/measure/memory.py +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/task/storage.py +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36/type/issue.py +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36.egg-info/SOURCES.txt +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36.egg-info/dependency_links.txt +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/package/logger_36.egg-info/top_level.txt +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/pyproject.toml +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/setup.cfg +0 -0
- {logger_36-2025.25 → logger_36-2025.27}/setup.py +0 -0
@@ -1,4 +1,4 @@
|
|
1
|
-
// Copyright CNRS/
|
1
|
+
// Copyright CNRS (https://www.cnrs.fr/index.php/en)
|
2
2
|
// Contributor(s): Eric Debreuve (eric.debreuve@cnrs.fr) since 2023
|
3
3
|
// SEE COPYRIGHT NOTICE BELOW
|
4
4
|
|
@@ -59,17 +59,3 @@
|
|
59
59
|
// knowledge of the CeCILL license and that you accept its terms.
|
60
60
|
//
|
61
61
|
// SEE LICENCE NOTICE: file README-LICENCE-utf8.txt at project source root.
|
62
|
-
//
|
63
|
-
// This software is being developed by Eric Debreuve, a CNRS employee and
|
64
|
-
// member of team Morpheme.
|
65
|
-
// Team Morpheme is a joint team between Inria, CNRS, and UniCA.
|
66
|
-
// It is hosted by the Centre Inria d'Université Côte d'Azur, Laboratory
|
67
|
-
// I3S, and Laboratory iBV.
|
68
|
-
//
|
69
|
-
// CNRS: https://www.cnrs.fr/index.php/en
|
70
|
-
// Inria: https://www.inria.fr/en/
|
71
|
-
// UniCA: https://univ-cotedazur.eu/
|
72
|
-
// Centre Inria d'Université Côte d'Azur: https://www.inria.fr/en/centre/sophia/
|
73
|
-
// I3S: https://www.i3s.unice.fr/en/
|
74
|
-
// iBV: http://ibv.unice.fr/
|
75
|
-
// Team Morpheme: https://team.inria.fr/morpheme/
|
@@ -7,14 +7,6 @@ SEE COPYRIGHT NOTICE BELOW
|
|
7
7
|
import logging as l
|
8
8
|
import typing as h
|
9
9
|
|
10
|
-
from rich.console import Console as console_t # noqa
|
11
|
-
from rich.console import RenderableType as renderable_t # noqa
|
12
|
-
from rich.markup import escape as EscapedVersion # noqa
|
13
|
-
from rich.rule import Rule as rule_t # noqa
|
14
|
-
from rich.style import Style as style_t # noqa
|
15
|
-
from rich.text import Text as text_t # noqa
|
16
|
-
from rich.traceback import install as InstallTracebackHandler # noqa
|
17
|
-
|
18
10
|
from logger_36.catalog.config.console_rich import (
|
19
11
|
ACTUAL_COLOR,
|
20
12
|
ALTERNATIVE_BACKGROUND_FOR_DARK,
|
@@ -29,6 +21,13 @@ from logger_36.config.message import ACTUAL_PATTERNS, EXPECTED_PATTERNS
|
|
29
21
|
from logger_36.constant.message import CONTEXT_LENGTH
|
30
22
|
from logger_36.constant.record import HAS_ACTUAL_EXPECTED_ATTR
|
31
23
|
from logger_36.type.handler import non_file_handler_t as base_t
|
24
|
+
from rich.console import Console as console_t # noqa
|
25
|
+
from rich.console import RenderableType as renderable_t # noqa
|
26
|
+
from rich.markup import escape as EscapedVersion # noqa
|
27
|
+
from rich.rule import Rule as rule_t # noqa
|
28
|
+
from rich.style import Style as style_t # noqa
|
29
|
+
from rich.text import Text as text_t # noqa
|
30
|
+
from rich.traceback import install as InstallTracebackHandler # noqa
|
32
31
|
|
33
32
|
_COMMON_TRACEBACK_ARGUMENTS = ("theme", "width")
|
34
33
|
_EXCLUSIVE_TRACEBACK_ARGUMENTS = (
|
@@ -105,7 +104,7 @@ class console_rich_handler_t(base_t):
|
|
105
104
|
|
106
105
|
def Rule(self, /, *, text: str | None = None, color: str = "black") -> str | rule_t:
|
107
106
|
""""""
|
108
|
-
if text
|
107
|
+
if text in (None, ""):
|
109
108
|
return rule_t(style=color)
|
110
109
|
return rule_t(title=text_t(text, style=f"bold {color}"), style=color)
|
111
110
|
|
@@ -94,7 +94,7 @@ class generic_handler_t(base_t):
|
|
94
94
|
def Rule(self, /, *, text: str | None = None, color: str = "black") -> str | rule_t:
|
95
95
|
""""""
|
96
96
|
if self.is_rich:
|
97
|
-
if text
|
97
|
+
if text in (None, ""):
|
98
98
|
return rule_t(style=color)
|
99
99
|
return rule_t(title=text_t(text, style=f"bold {color}"), style=color)
|
100
100
|
|
@@ -11,9 +11,7 @@ def WrappedLines(lines: list[str], message_width: int, /) -> list[str]:
|
|
11
11
|
|
12
12
|
for line in lines:
|
13
13
|
while line.__len__() > message_width:
|
14
|
-
if all(
|
15
|
-
_ != " " for _ in line[(message_width - 1) : (message_width + 1)]
|
16
|
-
):
|
14
|
+
if all(_ != " " for _ in line[(message_width - 1) : (message_width + 1)]):
|
17
15
|
if line[message_width - 2] == " ":
|
18
16
|
piece, line = (
|
19
17
|
line[: (message_width - 2)].rstrip(),
|
@@ -9,7 +9,6 @@ import inspect as e
|
|
9
9
|
import logging as l
|
10
10
|
import multiprocessing as prll
|
11
11
|
import sys as s
|
12
|
-
import textwrap as text
|
13
12
|
import threading as thrd
|
14
13
|
import traceback as tcbk
|
15
14
|
import types as t
|
@@ -41,7 +40,7 @@ from logger_36.constant.chronos import DATE_ORIGIN, DATE_TIME_ORIGIN
|
|
41
40
|
from logger_36.constant.issue import ISSUE_LEVEL_SEPARATOR, ORDER, order_h
|
42
41
|
from logger_36.constant.logger import WARNING_LOGGER_NAME, WARNING_TYPE_COMPILED_PATTERN
|
43
42
|
from logger_36.constant.memory import UNKNOWN_MEMORY_USAGE
|
44
|
-
from logger_36.constant.message import
|
43
|
+
from logger_36.constant.message import expected_op_h
|
45
44
|
from logger_36.constant.path import USER_FOLDER, LAUNCH_ROOT_FILE_relative
|
46
45
|
from logger_36.constant.record import (
|
47
46
|
HAS_ACTUAL_EXPECTED_ATTR,
|
@@ -56,7 +55,6 @@ from logger_36.extension.sentinel import NOT_PASSED
|
|
56
55
|
from logger_36.task.format.message import MessageWithActualExpected
|
57
56
|
from logger_36.task.measure.chronos import FormattedElapsedTime
|
58
57
|
from logger_36.task.measure.memory import CurrentUsage as CurrentMemoryUsage
|
59
|
-
from logger_36.type.handler import extension_t as handler_extension_t
|
60
58
|
from logger_36.type.handler import handler_h as base_handler_h
|
61
59
|
from logger_36.type.issue import NewIssue, issue_t
|
62
60
|
|
@@ -449,7 +447,7 @@ class logger_t(base_t):
|
|
449
447
|
"""
|
450
448
|
For a print-like calling for print-based debugging.
|
451
449
|
"""
|
452
|
-
separator = kwargs.
|
450
|
+
separator = kwargs.pop("separator", " ")
|
453
451
|
|
454
452
|
frame = e.stack(context=0)[1][0] # 1=caller.
|
455
453
|
details = e.getframeinfo(frame, context=0)
|
@@ -458,7 +456,10 @@ class logger_t(base_t):
|
|
458
456
|
path = path.relative_to(USER_FOLDER)
|
459
457
|
where = f"{str(path.with_suffix(''))}:{details.function}:{details.lineno}"
|
460
458
|
|
461
|
-
self.info(
|
459
|
+
self.info(
|
460
|
+
separator.join(map(str, args)) + f"\n{WHERE_SEPARATOR} " + where,
|
461
|
+
extra=kwargs,
|
462
|
+
)
|
462
463
|
|
463
464
|
def Log(
|
464
465
|
self,
|
@@ -471,6 +472,7 @@ class logger_t(base_t):
|
|
471
472
|
expected_is_choices: bool = False,
|
472
473
|
expected_op: expected_op_h = "=",
|
473
474
|
with_final_dot: bool = True,
|
475
|
+
**extra,
|
474
476
|
) -> None:
|
475
477
|
""""""
|
476
478
|
if isinstance(level, str):
|
@@ -483,23 +485,12 @@ class logger_t(base_t):
|
|
483
485
|
expected_op=expected_op,
|
484
486
|
with_final_dot=with_final_dot,
|
485
487
|
)
|
486
|
-
|
487
|
-
extra = {HAS_ACTUAL_EXPECTED_ATTR: True}
|
488
|
-
else:
|
489
|
-
extra = {}
|
488
|
+
extra[HAS_ACTUAL_EXPECTED_ATTR] = has_actual_expected
|
490
489
|
self.log(level, message, extra=extra)
|
491
490
|
|
492
|
-
def LogAsIs(self, message: str,
|
491
|
+
def LogAsIs(self, message: str, /) -> None:
|
493
492
|
""""""
|
494
|
-
|
495
|
-
message = text.indent(message, LINE_INDENT)
|
496
|
-
|
497
|
-
for handler in self.handlers:
|
498
|
-
EmitMessage = getattr(
|
499
|
-
handler, handler_extension_t.EmitMessage.__name__, None
|
500
|
-
)
|
501
|
-
if EmitMessage is not None:
|
502
|
-
EmitMessage(message)
|
493
|
+
self.log(l.INFO, message, extra={SHOW_WHEN_ATTR: False, SHOW_WHERE_ATTR: False})
|
503
494
|
|
504
495
|
info_raw = LogAsIs # To follow the convention of the logging methods info, error...
|
505
496
|
|
@@ -539,10 +530,22 @@ class logger_t(base_t):
|
|
539
530
|
self, /, *, message: str | None = None, color: str = "white"
|
540
531
|
) -> None:
|
541
532
|
""""""
|
542
|
-
|
543
|
-
|
544
|
-
|
545
|
-
|
533
|
+
if message is None:
|
534
|
+
message = ""
|
535
|
+
record = l.makeLogRecord(
|
536
|
+
{
|
537
|
+
"name": self.name,
|
538
|
+
"levelno": l.INFO, # For management by logging.Logger.handle.
|
539
|
+
"msg": message,
|
540
|
+
SHOW_W_RULE_ATTR: True,
|
541
|
+
}
|
542
|
+
)
|
543
|
+
base_t.handle(self, record)
|
544
|
+
# emit_rule_name = handler_extension_t.EmitRule.__name__
|
545
|
+
# for handler in self.handlers:
|
546
|
+
# EmitRule = getattr(handler, emit_rule_name, None)
|
547
|
+
# if EmitRule is not None:
|
548
|
+
# EmitRule(text=message, color=color)
|
546
549
|
|
547
550
|
def AddContextLevel(self, new_level: str, /) -> None:
|
548
551
|
""""""
|
@@ -698,9 +701,11 @@ class logger_t(base_t):
|
|
698
701
|
|
699
702
|
def __del__(self) -> None:
|
700
703
|
""""""
|
701
|
-
|
702
|
-
|
703
|
-
|
704
|
+
if (
|
705
|
+
(prll.current_process is not None)
|
706
|
+
and (prll.current_process().name == MAIN_PROCESS_NAME)
|
707
|
+
and (self.log_server is not None)
|
708
|
+
):
|
704
709
|
self.log_server.stop()
|
705
710
|
|
706
711
|
|
@@ -22,7 +22,6 @@ class loggers_t(dict[h.Hashable, logger_t]):
|
|
22
22
|
*,
|
23
23
|
name: str | None = None,
|
24
24
|
level: int = l.NOTSET,
|
25
|
-
should_record_messages: bool = False,
|
26
25
|
exit_on_error: bool = False,
|
27
26
|
exit_on_critical: bool = False,
|
28
27
|
activate_wrn_interceptions: bool = True,
|
@@ -31,7 +30,6 @@ class loggers_t(dict[h.Hashable, logger_t]):
|
|
31
30
|
) -> None:
|
32
31
|
""""""
|
33
32
|
logger = logger_t(
|
34
|
-
should_record_messages=should_record_messages,
|
35
33
|
exit_on_error=exit_on_error,
|
36
34
|
exit_on_critical=exit_on_critical,
|
37
35
|
name_=name,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|