From 513c58cba33a2a838f38dde29c518c09f330b8c6 Mon Sep 17 00:00:00 2001 From: DEBREUVE Eric <eric.debreuve@cnrs.fr> Date: Thu, 13 Feb 2025 11:36:59 +0100 Subject: [PATCH] alternating logs now defaults to 0 (disabled), improved alternating logs implementation --- .../logger_36/catalog/handler/console_rich.py | 51 ++++++++----------- package/logger_36/catalog/handler/generic.py | 31 ++++------- package/logger_36/handler.py | 8 +-- package/logger_36/type/logger.py | 4 +- package/logger_36/version.py | 2 +- test/main.py | 2 +- 6 files changed, 38 insertions(+), 60 deletions(-) diff --git a/package/logger_36/catalog/handler/console_rich.py b/package/logger_36/catalog/handler/console_rich.py index 752853c..e5c9fb4 100644 --- a/package/logger_36/catalog/handler/console_rich.py +++ b/package/logger_36/catalog/handler/console_rich.py @@ -48,21 +48,15 @@ class console_rich_handler_t(l.Handler): """ kind: See logger_36.constant.handler.handler_codes_h. - alternating_lines: - - Initial value: - - 1: enabled for dark background - - 2: enabled for light background - - anything else: disabled - - Runtime value: 0/1=do not/do highlight next time. + alternating_logs: + - 0: disabled + - 1: enabled for dark background + - 2: enabled for light background """ kind: h.ClassVar[str] = "c" - extension: handler_extension_t = d.field(init=False) - console: console_t = d.field(init=False) - MessageFromRecord: MessageFromRecordPreprocessed_p = d.field(init=False) - alternating_lines: int = 0 - background_is_light: bool = True + alternating_logs: int = 0 name: d.InitVar[str | None] = None level: d.InitVar[int] = l.NOTSET @@ -74,6 +68,11 @@ class console_rich_handler_t(l.Handler): should_record: d.InitVar[bool] = False rich_kwargs: d.InitVar[dict[str, h.Any] | None] = None + extension: handler_extension_t = d.field(init=False) + console: console_t = d.field(init=False) + MessageFromRecord: MessageFromRecordPreprocessed_p = d.field(init=False) + log_parity: bool = d.field(init=False, default=False) + @property def past_logs_as_HTML(self) -> str | None: """""" @@ -130,14 +129,7 @@ class console_rich_handler_t(l.Handler): InstallTracebackHandler(**rich_traceback_kwargs) self.MessageFromRecord = self.extension.MessageFromRecord - if self.alternating_lines == 1: - self.alternating_lines = 0 - self.background_is_light = False - elif self.alternating_lines == 2: - self.alternating_lines = 0 - self.background_is_light = True - else: - self.alternating_lines = -1 + assert self.alternating_logs in (0, 1, 2) def emit(self, record: l.LogRecord, /) -> None: """""" @@ -145,17 +137,15 @@ class console_rich_handler_t(l.Handler): richer = Rule(record.msg, DATE_TIME_COLOR) else: message = self.MessageFromRecord(record, PreProcessed=EscapedVersion) - should_highlight_back = self.alternating_lines == 1 - if self.alternating_lines >= 0: - self.alternating_lines = (self.alternating_lines + 1) % 2 richer = HighlightedVersion( self.console, message, record.levelno, - should_highlight_back=should_highlight_back, - background_is_light=self.background_is_light, + self.alternating_logs, + self.log_parity, ) self.console.print(richer, crop=False, overflow="ignore") + self.log_parity = not self.log_parity def LogAsIs(self, message: str | renderable_t, /) -> None: """ @@ -173,10 +163,9 @@ def HighlightedVersion( _: console_t, message: str, log_level: int, + alternating_logs: int, + should_tint_background: bool, /, - *, - should_highlight_back: bool = False, - background_is_light: bool = True, ) -> renderable_t: """""" output = text_t(message, WHITE_COLOR) @@ -188,11 +177,11 @@ def HighlightedVersion( _ = output.highlight_words(ACTUAL_PATTERNS, style=ACTUAL_COLOR) _ = output.highlight_regex(EXPECTED_PATTERNS, style=EXPECTED_COLOR) - if should_highlight_back: - if background_is_light: - style = ALTERNATIVE_BACKGROUND_FOR_LIGHT - else: + if should_tint_background and (alternating_logs > 0): + if alternating_logs == 1: style = ALTERNATIVE_BACKGROUND_FOR_DARK + else: + style = ALTERNATIVE_BACKGROUND_FOR_LIGHT output.stylize(style) return output diff --git a/package/logger_36/catalog/handler/generic.py b/package/logger_36/catalog/handler/generic.py index 607339b..8e7ee35 100644 --- a/package/logger_36/catalog/handler/generic.py +++ b/package/logger_36/catalog/handler/generic.py @@ -39,12 +39,10 @@ class generic_handler_t(l.Handler): """ kind: See logger_36.constant.handler.handler_codes_h. - alternating_lines: - - Initial value: - - 1: enabled for dark background - - 2: enabled for light background - - anything else: disabled - - Runtime value: 0/1=do not/do highlight next time. + alternating_logs: + - 0: disabled + - 1: enabled for dark background + - 2: enabled for light background LogAsIs: Log a message as is, i.e. without formatting. If this is a method, it should @@ -63,12 +61,12 @@ class generic_handler_t(l.Handler): # "None -> h.Any" (twice below) since None | None is invalid. console: console_t | h.Any = None console_options: console_options_t | h.Any = None - alternating_lines: int = 0 - background_is_light: bool = True + alternating_logs: int = 0 DisplayRule: DisplayRule_p = d.field(init=False) extension: handler_extension_t = d.field(init=False) MessageFromRecord: MessageFromRecord_h = d.field(init=False) + log_parity: bool = d.field(init=False, default=False) name: d.InitVar[str | None] = None level: d.InitVar[int] = l.NOTSET @@ -120,14 +118,7 @@ class generic_handler_t(l.Handler): self.DisplayRule = self._DisplayRuleAsText self.MessageFromRecord = self.extension.MessageFromRecord - if self.alternating_lines == 1: - self.alternating_lines = 0 - self.background_is_light = False - elif self.alternating_lines == 2: - self.alternating_lines = 0 - self.background_is_light = True - else: - self.alternating_lines = -1 + assert self.alternating_logs in (0, 1, 2) def emit(self, record: l.LogRecord, /) -> None: """""" @@ -141,15 +132,12 @@ class generic_handler_t(l.Handler): richer = Rule(record.msg, DATE_TIME_COLOR) else: message = self.MessageFromRecord(record, PreProcessed=EscapedForRich) - should_highlight_back = self.alternating_lines == 1 - if self.alternating_lines >= 0: - self.alternating_lines = (self.alternating_lines + 1) % 2 richer = HighlightedVersion( self.console, message, record.levelno, - should_highlight_back=should_highlight_back, - background_is_light=self.background_is_light, + self.alternating_logs, + self.log_parity, ) segments = self.console.render(richer, options=self.console_options) @@ -176,6 +164,7 @@ class generic_handler_t(l.Handler): ) self.LogAsIs(message) + self.log_parity = not self.log_parity def _DisplayRuleAsText( self, /, *, text: str | None = None, color: str = "white" diff --git a/package/logger_36/handler.py b/package/logger_36/handler.py index 33e0b87..769f2b0 100644 --- a/package/logger_36/handler.py +++ b/package/logger_36/handler.py @@ -33,7 +33,7 @@ def AddGenericHandler( message_width: int = -1, formatter: l.Formatter | None = None, supports_html: bool = False, - alternating_lines: int = 2, + alternating_logs: int = 0, should_record: bool = False, should_hold_messages: bool = False, **kwargs, @@ -46,7 +46,7 @@ def AddGenericHandler( message_width=message_width, formatter=formatter, supports_html=supports_html, - alternating_lines=alternating_lines, + alternating_logs=alternating_logs, should_record=should_record, rich_kwargs=kwargs, LogAsIs=LogAsIs, @@ -85,7 +85,7 @@ def AddRichConsoleHandler( should_store_memory_usage: bool = False, message_width: int = -1, formatter: l.Formatter | None = None, - alternating_lines: int = 2, + alternating_logs: int = 0, should_hold_messages: bool = False, should_install_traceback: bool = False, should_record: bool = False, @@ -101,7 +101,7 @@ def AddRichConsoleHandler( additional_s = {} else: additional_s = { - "alternating_lines": alternating_lines, + "alternating_logs": alternating_logs, "should_install_traceback": should_install_traceback, "should_record": should_record, "rich_kwargs": kwargs, diff --git a/package/logger_36/type/logger.py b/package/logger_36/type/logger.py index 63c6d1a..69fafc9 100644 --- a/package/logger_36/type/logger.py +++ b/package/logger_36/type/logger.py @@ -283,10 +283,10 @@ class logger_t(base_t): OverrideExceptionFormat() AddConsoleHandler(self) - def MakeRich(self, *, alternating_lines: int = 2) -> None: + def MakeRich(self, *, alternating_logs: int = 0) -> None: """""" OverrideExceptionFormat() - AddRichConsoleHandler(self, alternating_lines=alternating_lines) + AddRichConsoleHandler(self, alternating_logs=alternating_logs) def MakePermanent(self, path: str | path_t, /) -> None: """""" diff --git a/package/logger_36/version.py b/package/logger_36/version.py index 7721b71..710c4f3 100644 --- a/package/logger_36/version.py +++ b/package/logger_36/version.py @@ -4,7 +4,7 @@ Contributor(s): Eric Debreuve (eric.debreuve@cnrs.fr) since 2023 SEE COPYRIGHT NOTICE BELOW """ -__version__ = "2025.9" +__version__ = "2025.10" """ COPYRIGHT NOTICE diff --git a/test/main.py b/test/main.py index a4a5f80..491c03e 100644 --- a/test/main.py +++ b/test/main.py @@ -75,7 +75,7 @@ def Main() -> None: should_store_memory_usage=True, should_hold_messages=True, should_record=True, - alternating_lines=1, + alternating_logs=1, ) AddGenericHandler( L, -- GitLab