logger-36 2025.27__py3-none-any.whl → 2025.28__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/catalog/logger/chronos.py +30 -6
- logger_36/task/measure/chronos.py +7 -2
- logger_36/type/logger.py +11 -1
- logger_36/version.py +1 -1
- {logger_36-2025.27.dist-info → logger_36-2025.28.dist-info}/METADATA +1 -1
- {logger_36-2025.27.dist-info → logger_36-2025.28.dist-info}/RECORD +8 -8
- {logger_36-2025.27.dist-info → logger_36-2025.28.dist-info}/WHEEL +0 -0
- {logger_36-2025.27.dist-info → logger_36-2025.28.dist-info}/top_level.txt +0 -0
@@ -6,8 +6,8 @@ SEE COPYRIGHT NOTICE BELOW
|
|
6
6
|
|
7
7
|
from datetime import datetime as date_time_t
|
8
8
|
|
9
|
-
from logger_36.constant.chronos import FORMATTED_START_DATE_TIME
|
10
|
-
from logger_36.constant.record import SHOW_WHEN_ATTR
|
9
|
+
from logger_36.constant.chronos import FORMATTED_START_DATE_TIME, START_DATE_TIME
|
10
|
+
from logger_36.constant.record import SHOW_WHEN_ATTR, SHOW_WHERE_ATTR
|
11
11
|
from logger_36.instance.logger import L
|
12
12
|
from logger_36.task.measure.chronos import FormattedElapsedTime
|
13
13
|
from logger_36.type.logger import logger_t
|
@@ -15,11 +15,35 @@ from logger_36.type.logger import logger_t
|
|
15
15
|
|
16
16
|
def LogElapsedTime(*, logger: logger_t = L) -> None:
|
17
17
|
""""""
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
18
|
+
now = date_time_t.now()
|
19
|
+
|
20
|
+
message = (
|
21
|
+
f"Elapsed Time: {FormattedElapsedTime(now, with_separator=False)} "
|
22
|
+
f"(since {FORMATTED_START_DATE_TIME})"
|
22
23
|
)
|
24
|
+
if logger.intermediate_times.__len__() > 0:
|
25
|
+
intermediate_e_times = []
|
26
|
+
for (start_name, start_time), (end_name, end_time) in zip(
|
27
|
+
[("START", START_DATE_TIME)] + logger.intermediate_times,
|
28
|
+
logger.intermediate_times + [("END", now)],
|
29
|
+
strict=True,
|
30
|
+
):
|
31
|
+
intermediate_e_times.append(
|
32
|
+
(
|
33
|
+
f"{start_name} → {end_name}",
|
34
|
+
FormattedElapsedTime(
|
35
|
+
end_time, reference=start_time, with_separator=False
|
36
|
+
),
|
37
|
+
)
|
38
|
+
)
|
39
|
+
max_length = max(map(len, (_[0] for _ in intermediate_e_times)))
|
40
|
+
intermediate_e_times = "\n ".join(
|
41
|
+
f"{_: <{max_length}} +{__}" for _, __ in intermediate_e_times
|
42
|
+
)
|
43
|
+
message += "\n " + intermediate_e_times
|
44
|
+
logger.intermediate_times.clear()
|
45
|
+
|
46
|
+
logger.info(message, extra={SHOW_WHEN_ATTR: False, SHOW_WHERE_ATTR: False})
|
23
47
|
|
24
48
|
|
25
49
|
"""
|
@@ -24,7 +24,11 @@ def TimeStamp(*, precision: str = "microseconds") -> str:
|
|
24
24
|
|
25
25
|
|
26
26
|
def FormattedElapsedTime(
|
27
|
-
now: date_time_t,
|
27
|
+
now: date_time_t,
|
28
|
+
/,
|
29
|
+
*,
|
30
|
+
reference: date_time_t = START_DATE_TIME,
|
31
|
+
with_separator: bool = True,
|
28
32
|
) -> str:
|
29
33
|
""""""
|
30
34
|
output = str(now - reference)
|
@@ -36,7 +40,8 @@ def FormattedElapsedTime(
|
|
36
40
|
if output[0] == "0":
|
37
41
|
output = output[1:]
|
38
42
|
|
39
|
-
|
43
|
+
if with_separator:
|
44
|
+
output = ELAPSED_TIME_SEPARATOR + output
|
40
45
|
|
41
46
|
if output.__len__() > TIME_LENGTH:
|
42
47
|
return output[:TIME_LENGTH]
|
logger_36/type/logger.py
CHANGED
@@ -92,6 +92,9 @@ class logger_t(base_t):
|
|
92
92
|
|
93
93
|
history: dict[date_time_t, str] = d.field(init=False, default_factory=dict)
|
94
94
|
n_events: dict[int, int] = d.field(init=False, default_factory=dict)
|
95
|
+
intermediate_times: list[tuple[str, date_time_t]] = d.field(
|
96
|
+
init=False, default_factory=list
|
97
|
+
)
|
95
98
|
|
96
99
|
last_message_now: date_time_t = d.field(init=False, default=DATE_TIME_ORIGIN)
|
97
100
|
last_message_date: date_t = d.field(init=False, default=DATE_ORIGIN)
|
@@ -670,9 +673,13 @@ class logger_t(base_t):
|
|
670
673
|
del extra[HAS_ACTUAL_EXPECTED_ATTR]
|
671
674
|
self.staged_issues.clear()
|
672
675
|
|
676
|
+
def SetInstantName(self, name: str, /) -> None:
|
677
|
+
""""""
|
678
|
+
self.intermediate_times.append((name, date_time_t.now()))
|
679
|
+
|
673
680
|
def StoragePath(self, suffix: str, /) -> path_t:
|
674
681
|
"""
|
675
|
-
Use as staticmethod if needed.
|
682
|
+
Use as staticmethod if needed, passing a logger as self.
|
676
683
|
"""
|
677
684
|
for handler in self.handlers:
|
678
685
|
if (path := getattr(handler, "baseFilename", None)) is not None:
|
@@ -701,6 +708,9 @@ class logger_t(base_t):
|
|
701
708
|
|
702
709
|
def __del__(self) -> None:
|
703
710
|
""""""
|
711
|
+
for handler in self.handlers:
|
712
|
+
handler.flush()
|
713
|
+
|
704
714
|
if (
|
705
715
|
(prll.current_process is not None)
|
706
716
|
and (prll.current_process().name == MAIN_PROCESS_NAME)
|
logger_36/version.py
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
logger_36/__init__.py,sha256=mK6AD0eWI2Sk42oxleTvsxzYJ28FbHK5WNkpLgAhnNE,2129
|
2
|
-
logger_36/version.py,sha256=
|
2
|
+
logger_36/version.py,sha256=M8fpBaTd8kBwBG4nMFWglaJivCiPj_h78PHrwTU20B0,1680
|
3
3
|
logger_36/api/chronos.py,sha256=o_UMZbeExjb01aNURmzIjOMAHhI9e90nyvJJYcJR6VQ,1739
|
4
4
|
logger_36/api/logger.py,sha256=eLZ2yuH-sYeh4Z2KnAwTRJEbmkmgzBPMncdqXfFUTG8,1760
|
5
5
|
logger_36/api/memory.py,sha256=U4mMEkx8WRHk9q2d3SCFGt2EJaBuflOXw2bGbAxOnSc,1828
|
@@ -12,7 +12,7 @@ logger_36/catalog/handler/console_rich.py,sha256=PSHsul03HNjQR8GmQVU3Z0DNNaudOYN
|
|
12
12
|
logger_36/catalog/handler/file.py,sha256=5GR_aACDEBXuZ-pUH9P0OCaXbCf-aLPmsz-XrGCAIgE,2434
|
13
13
|
logger_36/catalog/handler/generic.py,sha256=HhBtM3JZBJjW2OLALnxdoWLsFs6J-AMzyFwwUs-woIA,7046
|
14
14
|
logger_36/catalog/handler/memory.py,sha256=pJwKOlCm8Ej8ipDI00-FfX4qJjMPXJb-DucD1ukIQOU,4057
|
15
|
-
logger_36/catalog/logger/chronos.py,sha256=
|
15
|
+
logger_36/catalog/logger/chronos.py,sha256=OTXM_Ltrn-5g-g09jDHfCROPLxA5D7Z9wX1XVe1rNkM,3215
|
16
16
|
logger_36/catalog/logger/gpu.py,sha256=Py5YY0nD_pqJzJsEKQYoOGHcPqyNVJ3J2noOS3hDL6g,2890
|
17
17
|
logger_36/catalog/logger/memory.py,sha256=pa-9pkvDGdf52giwL3Zi1mjWNFE_NVzBGdjwcfeIDNc,4256
|
18
18
|
logger_36/catalog/logger/system.py,sha256=zEbHirATqZAVYFmHLd0pppeuRhka1ucWwyHRq0afQNE,2593
|
@@ -41,13 +41,13 @@ logger_36/instance/loggers.py,sha256=inBk4KKrQ-z3szaopQ29-qQwh1iSc842sWo5J6zJoiM
|
|
41
41
|
logger_36/task/storage.py,sha256=L93v5w9p_7MoiagEr3d6QSYEQxX42DxmZ-BJTCuLpgQ,3915
|
42
42
|
logger_36/task/format/memory.py,sha256=xcWwbUnl1BxH7RVBHyhp1RlbT2n370PzoFLLLd3dtlU,3726
|
43
43
|
logger_36/task/format/message.py,sha256=Q9QkyUAU47Nj606zsvq0gNyso8Vk9G9OaqG9Em5FjKg,3575
|
44
|
-
logger_36/task/measure/chronos.py,sha256=
|
44
|
+
logger_36/task/measure/chronos.py,sha256=nlyPUebI_cJSU_aUvbunE1gs7ozP5lZg9D_yJ_i06qI,2685
|
45
45
|
logger_36/task/measure/memory.py,sha256=kkPHEIUTUhkCOLrAt01eLJLnsnkl0nFPNhFZdIB_JAw,1991
|
46
46
|
logger_36/type/handler.py,sha256=8ufQEjfIIk63rBTu0B-LF67x_UKDuFvnzC3g7CnfK18,6666
|
47
47
|
logger_36/type/issue.py,sha256=M2KeQwzDG9yqgdtbyWk5Y-ier7c71TuAKlNCf5QCGzY,2770
|
48
|
-
logger_36/type/logger.py,sha256=
|
48
|
+
logger_36/type/logger.py,sha256=069yBZKImTtbABgBHieJhKgkaqdak5Pr2Q7KXu3Caho,27820
|
49
49
|
logger_36/type/loggers.py,sha256=tFcuso9KGLDHnFfCaEJTDukUyYnbZEZrffpm59SDYO0,3067
|
50
|
-
logger_36-2025.
|
51
|
-
logger_36-2025.
|
52
|
-
logger_36-2025.
|
53
|
-
logger_36-2025.
|
50
|
+
logger_36-2025.28.dist-info/METADATA,sha256=YyGRwdDyWtK2k3HRWOkvA_4Z1T4Yq4npNmHzFLP9Ru8,5980
|
51
|
+
logger_36-2025.28.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
52
|
+
logger_36-2025.28.dist-info/top_level.txt,sha256=sM95BTMWmslEEgR_1pzwZsOeSp8C_QBiu8ImbFr0XLc,10
|
53
|
+
logger_36-2025.28.dist-info/RECORD,,
|
File without changes
|
File without changes
|