logger-36 2025.5__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.
- logger_36/api/logger.py +1 -1
- logger_36/api/storage.py +1 -1
- logger_36/catalog/config/console_rich.py +2 -2
- logger_36/{config/logger.py → catalog/config/optional.py} +8 -48
- logger_36/catalog/handler/console.py +8 -1
- logger_36/catalog/handler/console_rich.py +13 -6
- logger_36/catalog/handler/file.py +7 -1
- logger_36/catalog/handler/generic.py +13 -5
- logger_36/catalog/logger/gpu.py +2 -2
- logger_36/constant/error.py +1 -1
- logger_36/constant/handler.py +2 -2
- logger_36/constant/logger.py +2 -9
- logger_36/content.py +3 -3
- logger_36/exception.py +46 -12
- logger_36/gpu.py +1 -1
- logger_36/handler.py +12 -15
- logger_36/memory.py +9 -6
- logger_36/storage.py +1 -1
- logger_36/system.py +1 -1
- logger_36/task/format/rule.py +4 -2
- logger_36/task/measure/memory.py +2 -2
- logger_36/task/storage.py +7 -5
- logger_36/time.py +2 -2
- logger_36/type/handler.py +23 -4
- logger_36/type/logger.py +53 -15
- logger_36/version.py +1 -1
- {logger_36-2025.5.dist-info → logger_36-2025.6.dist-info}/METADATA +1 -1
- logger_36-2025.6.dist-info/RECORD +52 -0
- logger_36-2025.5.dist-info/RECORD +0 -52
- {logger_36-2025.5.dist-info → logger_36-2025.6.dist-info}/WHEEL +0 -0
- {logger_36-2025.5.dist-info → logger_36-2025.6.dist-info}/top_level.txt +0 -0
logger_36/api/logger.py
CHANGED
logger_36/api/storage.py
CHANGED
@@ -6,8 +6,8 @@ SEE COPYRIGHT NOTICE BELOW
|
|
6
6
|
|
7
7
|
import logging as l
|
8
8
|
|
9
|
-
from rich.color import Color as color_t
|
10
|
-
from rich.style import Style as style_t
|
9
|
+
from rich.color import Color as color_t # noqa
|
10
|
+
from rich.style import Style as style_t # noqa
|
11
11
|
|
12
12
|
"""
|
13
13
|
Colors: See https://rich.readthedocs.io/en/stable/appendix/colors.html.
|
@@ -4,54 +4,14 @@ Contributor(s): Eric Debreuve (eric.debreuve@cnrs.fr) since 2023
|
|
4
4
|
SEE COPYRIGHT NOTICE BELOW
|
5
5
|
"""
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
from logger_36.
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
from logger_36.task.format.message import MessageWithActualExpected
|
16
|
-
|
17
|
-
|
18
|
-
def SetLOGLevel(
|
19
|
-
level: int,
|
20
|
-
/,
|
21
|
-
*,
|
22
|
-
logger: l.Logger = L,
|
23
|
-
which: handler_codes_h | str = "a",
|
24
|
-
) -> None:
|
25
|
-
"""
|
26
|
-
which: g=generic, c=console, f=file, a=all, str=name.
|
27
|
-
"""
|
28
|
-
which_is_name = which not in HANDLER_CODES
|
29
|
-
found = False
|
30
|
-
for handler in logger.handlers:
|
31
|
-
if (
|
32
|
-
(which == "a")
|
33
|
-
or ((which == "g") and isinstance(handler, generic_handler_t))
|
34
|
-
or (
|
35
|
-
(which == "c")
|
36
|
-
and isinstance(handler, (console_handler_t, console_rich_handler_t))
|
37
|
-
)
|
38
|
-
or ((which == "f") and isinstance(handler, file_handler_t))
|
39
|
-
or (which == handler.name)
|
40
|
-
):
|
41
|
-
handler.setLevel(level)
|
42
|
-
if which_is_name:
|
43
|
-
return
|
44
|
-
found = True
|
45
|
-
|
46
|
-
if not found:
|
47
|
-
raise ValueError(
|
48
|
-
MessageWithActualExpected(
|
49
|
-
"Handler not found",
|
50
|
-
actual=which,
|
51
|
-
expected=f"{str(HANDLER_CODES)[1:-1]}, or a handler name",
|
52
|
-
)
|
53
|
-
)
|
54
|
-
|
7
|
+
try:
|
8
|
+
import rich # noqa
|
9
|
+
except ModuleNotFoundError:
|
10
|
+
RICH_IS_AVAILABLE = False
|
11
|
+
from logger_36.constant.error import MISSING_RICH_MESSAGE
|
12
|
+
else:
|
13
|
+
RICH_IS_AVAILABLE = True
|
14
|
+
MISSING_RICH_MESSAGE = None
|
55
15
|
|
56
16
|
"""
|
57
17
|
COPYRIGHT NOTICE
|
@@ -13,12 +13,19 @@ from logger_36.constant.message import LINE_INDENT
|
|
13
13
|
from logger_36.constant.record import SHOW_W_RULE_ATTR
|
14
14
|
from logger_36.task.format.rule import RuleAsText
|
15
15
|
from logger_36.type.handler import handler_extension_t
|
16
|
+
from logger_36.type.handler import message_from_record_raw_p as message_from_record_p
|
16
17
|
|
17
18
|
|
18
19
|
@d.dataclass(slots=True, repr=False, eq=False)
|
19
20
|
class console_handler_t(l.Handler):
|
21
|
+
"""
|
22
|
+
kind: See logger_36.constant.handler.handler_codes_h.
|
23
|
+
"""
|
24
|
+
|
25
|
+
kind: h.ClassVar[str] = "c"
|
26
|
+
|
20
27
|
extension: handler_extension_t = d.field(init=False)
|
21
|
-
MessageFromRecord:
|
28
|
+
MessageFromRecord: message_from_record_p = d.field(init=False)
|
22
29
|
|
23
30
|
name: d.InitVar[str | None] = None
|
24
31
|
level: d.InitVar[int] = l.NOTSET
|
@@ -24,11 +24,14 @@ from logger_36.constant.message import CONTEXT_LENGTH, LINE_INDENT
|
|
24
24
|
from logger_36.constant.record import SHOW_W_RULE_ATTR
|
25
25
|
from logger_36.task.format.rule import Rule, rule_t
|
26
26
|
from logger_36.type.handler import handler_extension_t
|
27
|
-
from
|
28
|
-
|
29
|
-
|
30
|
-
from rich.
|
31
|
-
from rich.
|
27
|
+
from logger_36.type.handler import (
|
28
|
+
message_from_record_preprocessed_p as message_from_record_p,
|
29
|
+
)
|
30
|
+
from rich.console import Console as console_t # noqa
|
31
|
+
from rich.console import RenderableType as renderable_t # noqa
|
32
|
+
from rich.markup import escape as EscapedVersion # noqa
|
33
|
+
from rich.text import Text as text_t # noqa
|
34
|
+
from rich.traceback import install as InstallTracebackHandler # noqa
|
32
35
|
|
33
36
|
_COMMON_TRACEBACK_ARGUMENTS = ("theme", "width")
|
34
37
|
_EXCLUSIVE_TRACEBACK_ARGUMENTS = (
|
@@ -47,6 +50,8 @@ _EXCLUSIVE_TRACEBACK_ARGUMENTS = (
|
|
47
50
|
@d.dataclass(slots=True, repr=False, eq=False)
|
48
51
|
class console_rich_handler_t(l.Handler):
|
49
52
|
"""
|
53
|
+
kind: See logger_36.constant.handler.handler_codes_h.
|
54
|
+
|
50
55
|
alternating_lines:
|
51
56
|
- Initial value:
|
52
57
|
- 1: enabled for dark background
|
@@ -55,9 +60,11 @@ class console_rich_handler_t(l.Handler):
|
|
55
60
|
- Runtime value: 0/1=do not/do highlight next time.
|
56
61
|
"""
|
57
62
|
|
63
|
+
kind: h.ClassVar[str] = "c"
|
64
|
+
|
58
65
|
extension: handler_extension_t = d.field(init=False)
|
59
66
|
console: console_t = d.field(init=False)
|
60
|
-
MessageFromRecord:
|
67
|
+
MessageFromRecord: message_from_record_p = d.field(init=False)
|
61
68
|
alternating_lines: int = 0
|
62
69
|
background_is_light: bool = True
|
63
70
|
|
@@ -14,13 +14,19 @@ from logger_36.constant.message import LINE_INDENT
|
|
14
14
|
from logger_36.constant.record import SHOW_W_RULE_ATTR
|
15
15
|
from logger_36.task.format.rule import RuleAsText
|
16
16
|
from logger_36.type.handler import handler_extension_t
|
17
|
+
from logger_36.type.handler import message_from_record_raw_p as message_from_record_p
|
17
18
|
|
18
19
|
|
19
20
|
@d.dataclass(slots=True, repr=False, eq=False)
|
20
21
|
class file_handler_t(l.FileHandler):
|
22
|
+
"""
|
23
|
+
kind: See logger_36.constant.handler.handler_codes_h.
|
24
|
+
"""
|
25
|
+
|
26
|
+
kind: h.ClassVar[str] = "f"
|
21
27
|
|
22
28
|
extension: handler_extension_t = d.field(init=False)
|
23
|
-
MessageFromRecord:
|
29
|
+
MessageFromRecord: message_from_record_p = d.field(init=False)
|
24
30
|
|
25
31
|
name: d.InitVar[str | None] = None
|
26
32
|
level: d.InitVar[int] = l.NOTSET
|
@@ -8,19 +8,23 @@ import dataclasses as d
|
|
8
8
|
import logging as l
|
9
9
|
import typing as h
|
10
10
|
|
11
|
-
|
11
|
+
from logger_36.catalog.config.optional import RICH_IS_AVAILABLE
|
12
|
+
|
13
|
+
if RICH_IS_AVAILABLE:
|
12
14
|
from logger_36.catalog.config.console_rich import DATE_TIME_COLOR
|
13
15
|
from logger_36.catalog.handler.console_rich import HighlightedVersion
|
14
16
|
from rich.console import Console as console_t # noqa
|
15
17
|
from rich.console import ConsoleOptions as console_options_t # noqa
|
16
18
|
from rich.markup import escape as EscapedForRich # noqa
|
17
19
|
from rich.terminal_theme import DEFAULT_TERMINAL_THEME # noqa
|
18
|
-
|
19
|
-
|
20
|
+
else:
|
21
|
+
DATE_TIME_COLOR = HighlightedVersion = console_t = console_options_t = (
|
22
|
+
EscapedForRich
|
23
|
+
) = DEFAULT_TERMINAL_THEME = None
|
20
24
|
|
21
25
|
from logger_36.constant.record import SHOW_W_RULE_ATTR
|
22
26
|
from logger_36.task.format.rule import Rule, RuleAsText
|
23
|
-
from logger_36.type.handler import handler_extension_t
|
27
|
+
from logger_36.type.handler import handler_extension_t, message_from_record_h
|
24
28
|
|
25
29
|
|
26
30
|
@h.runtime_checkable
|
@@ -36,6 +40,8 @@ class display_rule_p(h.Protocol):
|
|
36
40
|
@d.dataclass(slots=True, repr=False, eq=False)
|
37
41
|
class generic_handler_t(l.Handler):
|
38
42
|
"""
|
43
|
+
kind: See logger_36.constant.handler.handler_codes_h.
|
44
|
+
|
39
45
|
alternating_lines:
|
40
46
|
- Initial value:
|
41
47
|
- 1: enabled for dark background
|
@@ -54,6 +60,8 @@ class generic_handler_t(l.Handler):
|
|
54
60
|
it is indeed called at the end of the emit method.
|
55
61
|
"""
|
56
62
|
|
63
|
+
kind: h.ClassVar[str] = "g"
|
64
|
+
|
57
65
|
ShowMessage: show_message_p
|
58
66
|
# "None -> h.Any" (twice below) since None | None is invalid.
|
59
67
|
console: console_t | h.Any = None
|
@@ -63,7 +71,7 @@ class generic_handler_t(l.Handler):
|
|
63
71
|
|
64
72
|
DisplayRule: display_rule_p = d.field(init=False)
|
65
73
|
extension: handler_extension_t = d.field(init=False)
|
66
|
-
MessageFromRecord:
|
74
|
+
MessageFromRecord: message_from_record_h = d.field(init=False)
|
67
75
|
|
68
76
|
name: d.InitVar[str | None] = None
|
69
77
|
level: d.InitVar[int] = l.NOTSET
|
logger_36/catalog/logger/gpu.py
CHANGED
@@ -13,11 +13,11 @@ from logger_36.type.logger import logger_t
|
|
13
13
|
try:
|
14
14
|
import tensorflow as tsfl # noqa
|
15
15
|
import tensorrt as tsrt # noqa
|
16
|
-
|
17
|
-
_GPU_LOGGING_ERROR = None
|
18
16
|
except ModuleNotFoundError:
|
19
17
|
tsfl = tsrt = None
|
20
18
|
_GPU_LOGGING_ERROR = GPU_LOGGING_ERROR
|
19
|
+
else:
|
20
|
+
_GPU_LOGGING_ERROR = None
|
21
21
|
|
22
22
|
|
23
23
|
def LogGPURelatedDetails(*, logger: logger_t = L) -> None:
|
logger_36/constant/error.py
CHANGED
@@ -16,7 +16,7 @@ MEMORY_MEASURE_ERROR = (
|
|
16
16
|
"is not installed or not importable."
|
17
17
|
)
|
18
18
|
|
19
|
-
|
19
|
+
MISSING_RICH_MESSAGE = (
|
20
20
|
"The Rich console handler is not available because the Rich package "
|
21
21
|
"(https://rich.readthedocs.io/en/stable/) "
|
22
22
|
"is not installed or not importable. "
|
logger_36/constant/handler.py
CHANGED
@@ -6,8 +6,8 @@ SEE COPYRIGHT NOTICE BELOW
|
|
6
6
|
|
7
7
|
import typing as h
|
8
8
|
|
9
|
-
handler_codes_h = h.Literal["g", "c", "f", "a"]
|
10
|
-
|
9
|
+
handler_codes_h = h.Literal["g", "c", "f", "a"] # g=generic, c=console, f=file, a=all.
|
10
|
+
HANDLER_KINDS: tuple[str, ...] = h.get_args(handler_codes_h)
|
11
11
|
|
12
12
|
ANONYMOUS = "<Anonymous>"
|
13
13
|
|
logger_36/constant/logger.py
CHANGED
@@ -4,21 +4,14 @@ Contributor(s): Eric Debreuve (eric.debreuve@cnrs.fr) since 2023
|
|
4
4
|
SEE COPYRIGHT NOTICE BELOW
|
5
5
|
"""
|
6
6
|
|
7
|
-
import
|
8
|
-
import re as regx
|
9
|
-
import typing as h
|
7
|
+
import re as r
|
10
8
|
|
11
9
|
LOGGER_NAME = "logger-36"
|
12
10
|
|
13
11
|
# https://docs.python.org/3/library/logging.html#logging.captureWarnings
|
14
12
|
WARNING_LOGGER_NAME = "py.warnings"
|
15
13
|
WARNING_TYPE_PATTERN = r"\s*([^:]+):([0-9]+):\s*([^:]+)\s*:((.|\n)*)"
|
16
|
-
WARNING_TYPE_COMPILED_PATTERN =
|
17
|
-
|
18
|
-
# Second version: with self as first parameter.
|
19
|
-
logger_handle_h = (
|
20
|
-
h.Callable[[l.LogRecord], None] | h.Callable[[l.Logger, l.LogRecord], None]
|
21
|
-
)
|
14
|
+
WARNING_TYPE_COMPILED_PATTERN = r.compile(WARNING_TYPE_PATTERN)
|
22
15
|
|
23
16
|
"""
|
24
17
|
COPYRIGHT NOTICE
|
logger_36/content.py
CHANGED
@@ -4,9 +4,9 @@ Contributor(s): Eric Debreuve (eric.debreuve@cnrs.fr) since 2023
|
|
4
4
|
SEE COPYRIGHT NOTICE BELOW
|
5
5
|
"""
|
6
6
|
|
7
|
-
from logger_36.constant.message import LINE_INDENT
|
8
|
-
from logger_36.task.format.message import MessageWithActualExpected
|
9
|
-
from logger_36.task.format.rule import Rule, RuleAsText
|
7
|
+
from logger_36.constant.message import LINE_INDENT # noqa
|
8
|
+
from logger_36.task.format.message import MessageWithActualExpected # noqa
|
9
|
+
from logger_36.task.format.rule import Rule, RuleAsText # noqa
|
10
10
|
|
11
11
|
"""
|
12
12
|
COPYRIGHT NOTICE
|
logger_36/exception.py
CHANGED
@@ -4,6 +4,7 @@ Contributor(s): Eric Debreuve (eric.debreuve@cnrs.fr) since 2023
|
|
4
4
|
SEE COPYRIGHT NOTICE BELOW
|
5
5
|
"""
|
6
6
|
|
7
|
+
import re as r
|
7
8
|
import sys as s
|
8
9
|
import tempfile as tmpf
|
9
10
|
import traceback as tcbk
|
@@ -30,24 +31,57 @@ def _HandleException(
|
|
30
31
|
while trace.tb_next is not None:
|
31
32
|
trace = trace.tb_next
|
32
33
|
frame = trace.tb_frame
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
34
|
+
code = frame.f_code
|
35
|
+
module = path_t(code.co_filename)
|
36
|
+
function = code.co_name
|
37
|
+
line_number = frame.f_lineno
|
38
|
+
line_content = module.read_text().splitlines()[line_number - 1].strip()
|
39
|
+
|
40
|
+
# Format module.
|
41
|
+
home = path_t.home()
|
42
|
+
if module.is_relative_to(home):
|
43
|
+
module = path_t("~") / module.relative_to(home)
|
44
|
+
|
45
|
+
# Format line content.
|
46
|
+
if line_content.startswith("raise "):
|
47
|
+
# Do not display code of explicit exception raising.
|
48
|
+
line_content = None
|
49
|
+
|
50
|
+
# Find variables appearing in the line.
|
51
|
+
if line_content is None:
|
52
|
+
line_content = variables = ""
|
53
|
+
else:
|
54
|
+
all_variables = frame.f_locals
|
55
|
+
found_names = []
|
56
|
+
for match in r.finditer(r"[^\d\W]\w*", line_content):
|
57
|
+
name = match.group()
|
58
|
+
if name in all_variables:
|
59
|
+
found_names.append(name)
|
60
|
+
if found_names.__len__() > 0:
|
61
|
+
longest = max(map(len, found_names))
|
62
|
+
variables = map(
|
63
|
+
lambda _: f"{_:{longest}} = {all_variables[_]}", sorted(found_names)
|
64
|
+
)
|
65
|
+
variables = " " + "\n ".join(variables) + "\n"
|
66
|
+
else:
|
67
|
+
variables = ""
|
68
|
+
|
69
|
+
line_content = f" {line_content}\n"
|
70
|
+
|
71
|
+
# Format message.
|
72
|
+
message = str(exception).strip()
|
42
73
|
if message.__len__() > 0:
|
43
|
-
message = f" {message}\n"
|
74
|
+
message = f" {message[0].title()}{message[1:]}\n"
|
44
75
|
|
45
76
|
document = tmpf.NamedTemporaryFile(delete=False)
|
46
77
|
|
47
78
|
print(
|
48
79
|
f"{stripe.__name__}\n"
|
49
|
-
f" {module}
|
50
|
-
f"{
|
80
|
+
f" {module}:{function}@{line_number}\n"
|
81
|
+
f"{line_content}"
|
82
|
+
f"{variables}"
|
83
|
+
f"{message}"
|
84
|
+
f" Full report at: {document.name}",
|
51
85
|
file=s.stderr,
|
52
86
|
)
|
53
87
|
|
logger_36/gpu.py
CHANGED
logger_36/handler.py
CHANGED
@@ -8,21 +8,18 @@ import logging as l
|
|
8
8
|
import sys as s
|
9
9
|
from pathlib import Path as path_t
|
10
10
|
|
11
|
+
from logger_36.catalog.config.optional import MISSING_RICH_MESSAGE, RICH_IS_AVAILABLE
|
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
14
|
from logger_36.catalog.handler.generic import generic_handler_t, show_message_p
|
14
|
-
from logger_36.constant.error import MISSING_RICH_ERROR
|
15
15
|
|
16
|
-
|
16
|
+
if RICH_IS_AVAILABLE:
|
17
17
|
from logger_36.catalog.handler.console_rich import console_rich_handler_t
|
18
|
-
|
19
|
-
_MISSING_RICH_ERROR = None
|
20
|
-
except ModuleNotFoundError:
|
18
|
+
else:
|
21
19
|
from logger_36.catalog.handler.console import (
|
22
20
|
console_handler_t as console_rich_handler_t,
|
23
21
|
)
|
24
|
-
|
25
|
-
_MISSING_RICH_ERROR = MISSING_RICH_ERROR
|
22
|
+
_MISSING_RICH_MESSAGE = MISSING_RICH_MESSAGE
|
26
23
|
|
27
24
|
|
28
25
|
def AddGenericHandler(
|
@@ -54,7 +51,7 @@ def AddGenericHandler(
|
|
54
51
|
rich_kwargs=kwargs,
|
55
52
|
ShowMessage=ShowMessage,
|
56
53
|
)
|
57
|
-
logger.AddHandler(handler, should_hold_messages)
|
54
|
+
logger.AddHandler(handler, should_hold_messages=should_hold_messages)
|
58
55
|
|
59
56
|
|
60
57
|
def AddConsoleHandler(
|
@@ -76,7 +73,7 @@ def AddConsoleHandler(
|
|
76
73
|
message_width=message_width,
|
77
74
|
formatter=formatter,
|
78
75
|
)
|
79
|
-
logger.AddHandler(handler, should_hold_messages)
|
76
|
+
logger.AddHandler(handler, should_hold_messages=should_hold_messages)
|
80
77
|
|
81
78
|
|
82
79
|
def AddRichConsoleHandler(
|
@@ -95,10 +92,10 @@ def AddRichConsoleHandler(
|
|
95
92
|
**kwargs,
|
96
93
|
) -> None:
|
97
94
|
""""""
|
98
|
-
global
|
99
|
-
if
|
100
|
-
print(
|
101
|
-
|
95
|
+
global _MISSING_RICH_MESSAGE
|
96
|
+
if _MISSING_RICH_MESSAGE is not None:
|
97
|
+
print(_MISSING_RICH_MESSAGE, file=s.stderr)
|
98
|
+
_MISSING_RICH_MESSAGE = None
|
102
99
|
|
103
100
|
if console_rich_handler_t is console_handler_t:
|
104
101
|
additional_s = {}
|
@@ -117,7 +114,7 @@ def AddRichConsoleHandler(
|
|
117
114
|
formatter=formatter,
|
118
115
|
**additional_s,
|
119
116
|
)
|
120
|
-
logger.AddHandler(handler, should_hold_messages)
|
117
|
+
logger.AddHandler(handler, should_hold_messages=should_hold_messages)
|
121
118
|
|
122
119
|
|
123
120
|
def AddFileHandler(
|
@@ -149,7 +146,7 @@ def AddFileHandler(
|
|
149
146
|
handler_args=args,
|
150
147
|
handler_kwargs=kwargs,
|
151
148
|
)
|
152
|
-
logger.AddHandler(handler, should_hold_messages)
|
149
|
+
logger.AddHandler(handler, should_hold_messages=should_hold_messages)
|
153
150
|
|
154
151
|
|
155
152
|
"""
|
logger_36/memory.py
CHANGED
@@ -4,14 +4,17 @@ Contributor(s): Eric Debreuve (eric.debreuve@cnrs.fr) since 2023
|
|
4
4
|
SEE COPYRIGHT NOTICE BELOW
|
5
5
|
"""
|
6
6
|
|
7
|
-
from logger_36.catalog.logger.memory import
|
8
|
-
|
9
|
-
|
7
|
+
from logger_36.catalog.logger.memory import ( # noqa
|
8
|
+
LogMaximumMemoryUsage,
|
9
|
+
LogMemoryUsages,
|
10
|
+
)
|
11
|
+
from logger_36.task.format.memory import FormattedUsage as FormattedMemoryUsage # noqa
|
12
|
+
from logger_36.task.format.memory import ( # noqa
|
10
13
|
FormattedUsageWithAutoUnit as FormattedMemoryUsageWithAutoUnit,
|
11
14
|
)
|
12
|
-
from logger_36.task.format.memory import UsageBar as MemoryUsageBar
|
13
|
-
from logger_36.task.measure.memory import CanCheckUsage as CanCheckMemoryUsage
|
14
|
-
from logger_36.task.measure.memory import CurrentUsage as CurrentMemoryUsage
|
15
|
+
from logger_36.task.format.memory import UsageBar as MemoryUsageBar # noqa
|
16
|
+
from logger_36.task.measure.memory import CanCheckUsage as CanCheckMemoryUsage # noqa
|
17
|
+
from logger_36.task.measure.memory import CurrentUsage as CurrentMemoryUsage # noqa
|
15
18
|
|
16
19
|
"""
|
17
20
|
COPYRIGHT NOTICE
|
logger_36/storage.py
CHANGED
logger_36/system.py
CHANGED
logger_36/task/format/rule.py
CHANGED
@@ -4,6 +4,8 @@ Contributor(s): Eric Debreuve (eric.debreuve@cnrs.fr) since 2023
|
|
4
4
|
SEE COPYRIGHT NOTICE BELOW
|
5
5
|
"""
|
6
6
|
|
7
|
+
from logger_36.catalog.config.optional import RICH_IS_AVAILABLE
|
8
|
+
|
7
9
|
|
8
10
|
def RuleAsText(text: str | None, /) -> str:
|
9
11
|
""""""
|
@@ -13,7 +15,7 @@ def RuleAsText(text: str | None, /) -> str:
|
|
13
15
|
return f"---- ---- ---- ---- {text} ---- ---- ---- ----"
|
14
16
|
|
15
17
|
|
16
|
-
|
18
|
+
if RICH_IS_AVAILABLE:
|
17
19
|
from rich.rule import Rule as rule_t # noqa
|
18
20
|
from rich.text import Text as text_t # noqa
|
19
21
|
|
@@ -24,7 +26,7 @@ try:
|
|
24
26
|
else:
|
25
27
|
return rule_t(title=text_t(text, style=f"bold {color}"), style=color)
|
26
28
|
|
27
|
-
|
29
|
+
else:
|
28
30
|
Rule = lambda _txt, _: RuleAsText(_txt)
|
29
31
|
|
30
32
|
"""
|
logger_36/task/measure/memory.py
CHANGED
logger_36/task/storage.py
CHANGED
@@ -6,17 +6,19 @@ SEE COPYRIGHT NOTICE BELOW
|
|
6
6
|
|
7
7
|
import dataclasses as d
|
8
8
|
import logging as l
|
9
|
-
import re as
|
9
|
+
import re as r
|
10
10
|
from html.parser import HTMLParser as html_parser_t
|
11
11
|
from io import IOBase as io_base_t
|
12
12
|
from pathlib import Path as path_t
|
13
13
|
|
14
|
-
|
14
|
+
from logger_36.catalog.config.optional import RICH_IS_AVAILABLE
|
15
|
+
from logger_36.instance.logger import L
|
16
|
+
|
17
|
+
if RICH_IS_AVAILABLE:
|
15
18
|
from rich.console import Console as console_t # noqa
|
16
|
-
|
19
|
+
else:
|
17
20
|
console_t = None
|
18
21
|
|
19
|
-
from logger_36.instance.logger import L
|
20
22
|
|
21
23
|
_BODY_END_PATTERN = r"</[bB][oO][dD][yY]>(.|\n)*$"
|
22
24
|
|
@@ -60,7 +62,7 @@ class html_reader_t(html_parser_t):
|
|
60
62
|
output[self.body_position_start[0] : (self.body_position_end[0] + 1)]
|
61
63
|
)
|
62
64
|
output = output[self.body_position_start[1] :]
|
63
|
-
output =
|
65
|
+
output = r.sub(_BODY_END_PATTERN, "", output, count=1)
|
64
66
|
|
65
67
|
return output.strip()
|
66
68
|
|
logger_36/time.py
CHANGED
@@ -4,8 +4,8 @@ Contributor(s): Eric Debreuve (eric.debreuve@cnrs.fr) since 2023
|
|
4
4
|
SEE COPYRIGHT NOTICE BELOW
|
5
5
|
"""
|
6
6
|
|
7
|
-
from logger_36.catalog.logger.chronos import LogElapsedTime
|
8
|
-
from logger_36.task.measure.chronos import ElapsedTime, TimeStamp
|
7
|
+
from logger_36.catalog.logger.chronos import LogElapsedTime # noqa
|
8
|
+
from logger_36.task.measure.chronos import ElapsedTime, TimeStamp # noqa
|
9
9
|
|
10
10
|
"""
|
11
11
|
COPYRIGHT NOTICE
|
logger_36/type/handler.py
CHANGED
@@ -16,12 +16,31 @@ from logger_36.config.message import (
|
|
16
16
|
WHERE_SEPARATOR,
|
17
17
|
)
|
18
18
|
from logger_36.constant.error import MEMORY_MEASURE_ERROR
|
19
|
-
from logger_36.constant.handler import
|
19
|
+
from logger_36.constant.handler import HANDLER_KINDS
|
20
20
|
from logger_36.constant.message import NEXT_LINE_PROLOGUE
|
21
21
|
from logger_36.task.format.message import MessageWithActualExpected
|
22
22
|
from logger_36.task.measure.chronos import TimeStamp
|
23
23
|
from logger_36.task.measure.memory import CanCheckUsage as CanCheckMemoryUsage
|
24
24
|
|
25
|
+
|
26
|
+
@h.runtime_checkable
|
27
|
+
class message_from_record_raw_p(h.Protocol):
|
28
|
+
def __call__(self, record: l.LogRecord, /) -> str: ...
|
29
|
+
|
30
|
+
|
31
|
+
@h.runtime_checkable
|
32
|
+
class message_from_record_preprocessed_p(h.Protocol):
|
33
|
+
def __call__(
|
34
|
+
self,
|
35
|
+
record: l.LogRecord,
|
36
|
+
/,
|
37
|
+
*,
|
38
|
+
PreProcessed: h.Callable[[str], str] | None = None,
|
39
|
+
) -> str: ...
|
40
|
+
|
41
|
+
|
42
|
+
message_from_record_h = message_from_record_raw_p | message_from_record_preprocessed_p
|
43
|
+
|
25
44
|
_MEMORY_MEASURE_ERROR = MEMORY_MEASURE_ERROR
|
26
45
|
|
27
46
|
|
@@ -30,7 +49,7 @@ class handler_extension_t:
|
|
30
49
|
name: str | None = None
|
31
50
|
should_store_memory_usage: bool = False
|
32
51
|
message_width: int = -1
|
33
|
-
MessageFromRecord:
|
52
|
+
MessageFromRecord: message_from_record_h = d.field(init=False)
|
34
53
|
|
35
54
|
handler: d.InitVar[l.Handler | None] = None
|
36
55
|
level: d.InitVar[int] = l.NOTSET
|
@@ -42,12 +61,12 @@ class handler_extension_t:
|
|
42
61
|
""""""
|
43
62
|
global _MEMORY_MEASURE_ERROR
|
44
63
|
|
45
|
-
if self.name in
|
64
|
+
if self.name in HANDLER_KINDS:
|
46
65
|
raise ValueError(
|
47
66
|
MessageWithActualExpected(
|
48
67
|
"Invalid handler name",
|
49
68
|
actual=self.name,
|
50
|
-
expected=f"a name not in {str(
|
69
|
+
expected=f"a name not in {str(HANDLER_KINDS)[1:-1]}",
|
51
70
|
)
|
52
71
|
)
|
53
72
|
|
logger_36/type/logger.py
CHANGED
@@ -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
|
@@ -46,14 +45,18 @@ from logger_36.task.measure.chronos import ElapsedTime
|
|
46
45
|
from logger_36.task.measure.memory import CurrentUsage as CurrentMemoryUsage
|
47
46
|
from logger_36.type.issue import NewIssue, issue_t
|
48
47
|
|
49
|
-
|
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
|
50
53
|
|
51
54
|
_DATE_TIME_ORIGIN = date_time_t.fromtimestamp(1970, None)
|
52
55
|
_DATE_ORIGIN = _DATE_TIME_ORIGIN.date()
|
53
56
|
|
54
57
|
|
55
58
|
@d.dataclass(slots=True, repr=False, eq=False)
|
56
|
-
class logger_t(
|
59
|
+
class logger_t(base_t):
|
57
60
|
"""
|
58
61
|
intercepted_wrn_handle: When warning interception is on, this stores the original
|
59
62
|
"handle" method of the Python warning logger.
|
@@ -85,9 +88,9 @@ class logger_t(logger_base_t):
|
|
85
88
|
self, name_: str, level_: int, activate_wrn_interceptions: bool
|
86
89
|
) -> None:
|
87
90
|
""""""
|
88
|
-
|
91
|
+
base_t.__init__(self, name_)
|
89
92
|
self.setLevel(level_)
|
90
|
-
self.propagate = False # Part of
|
93
|
+
self.propagate = False # Part of base_t.
|
91
94
|
|
92
95
|
for level in l.getLevelNamesMapping().values():
|
93
96
|
self.events[level] = 0
|
@@ -97,6 +100,39 @@ class logger_t(logger_base_t):
|
|
97
100
|
if self.exit_on_error:
|
98
101
|
self.exit_on_critical = True
|
99
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
|
+
|
100
136
|
def MakeRich(self, *, alternating_lines: int = 2) -> None:
|
101
137
|
""""""
|
102
138
|
OverrideExceptionFormat()
|
@@ -182,10 +218,12 @@ class logger_t(logger_base_t):
|
|
182
218
|
|
183
219
|
return "?", UNKNOWN_MEMORY_USAGE
|
184
220
|
|
185
|
-
def AddHandler(
|
221
|
+
def AddHandler(
|
222
|
+
self, handler: l.Handler, /, *, should_hold_messages: bool = False
|
223
|
+
) -> None:
|
186
224
|
""""""
|
187
225
|
self.should_hold_messages = should_hold_messages
|
188
|
-
|
226
|
+
base_t.addHandler(self, handler)
|
189
227
|
|
190
228
|
extension = getattr(handler, "extension", None)
|
191
229
|
if extension is None:
|
@@ -212,7 +250,7 @@ class logger_t(logger_base_t):
|
|
212
250
|
|
213
251
|
if (self.on_hold.__len__() > 0) and not self.should_hold_messages:
|
214
252
|
for held in self.on_hold:
|
215
|
-
|
253
|
+
base_t.handle(self, held)
|
216
254
|
self.on_hold.clear()
|
217
255
|
|
218
256
|
if (date := now.date()) != self.last_message_date:
|
@@ -229,7 +267,7 @@ class logger_t(logger_base_t):
|
|
229
267
|
if self.should_hold_messages:
|
230
268
|
self.on_hold.append(date_record)
|
231
269
|
else:
|
232
|
-
|
270
|
+
base_t.handle(self, date_record)
|
233
271
|
|
234
272
|
# When.
|
235
273
|
if now - self.last_message_now > LONG_ENOUGH:
|
@@ -271,7 +309,7 @@ class logger_t(logger_base_t):
|
|
271
309
|
if self.should_hold_messages:
|
272
310
|
self.on_hold.append(record)
|
273
311
|
else:
|
274
|
-
|
312
|
+
base_t.handle(self, record)
|
275
313
|
|
276
314
|
if (self.exit_on_critical and (record.levelno is l.CRITICAL)) or (
|
277
315
|
self.exit_on_error and (record.levelno is l.ERROR)
|
@@ -462,10 +500,10 @@ class logger_t(logger_base_t):
|
|
462
500
|
return False
|
463
501
|
|
464
502
|
|
465
|
-
def _HandleForWarnings(interceptor:
|
503
|
+
def _HandleForWarnings(interceptor: base_t, /) -> logger_handle_h:
|
466
504
|
""""""
|
467
505
|
|
468
|
-
def handle_p(_:
|
506
|
+
def handle_p(_: base_t, record: l.LogRecord, /) -> None:
|
469
507
|
pieces = WARNING_TYPE_COMPILED_PATTERN.match(record.msg)
|
470
508
|
if pieces is None:
|
471
509
|
# The warning message does not follow the default format.
|
@@ -491,11 +529,11 @@ def _HandleForWarnings(interceptor: logger_base_t, /) -> logger_handle_h:
|
|
491
529
|
|
492
530
|
|
493
531
|
def _HandleForInterceptions(
|
494
|
-
intercepted:
|
532
|
+
intercepted: base_t, interceptor: base_t, /
|
495
533
|
) -> logger_handle_h:
|
496
534
|
""""""
|
497
535
|
|
498
|
-
def handle_p(_:
|
536
|
+
def handle_p(_: base_t, record: l.LogRecord, /) -> None:
|
499
537
|
duplicate = l.makeLogRecord(record.__dict__)
|
500
538
|
duplicate.msg = f"{record.msg} :{intercepted.name}:"
|
501
539
|
interceptor.handle(duplicate)
|
logger_36/version.py
CHANGED
@@ -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=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,,
|
File without changes
|
File without changes
|