Source code for f_lib.logging._fluid_log_render

"""Adapted from https://github.com/pycontribs/enrich/blob/v1.2.7/src/enrich/logging.py."""

from __future__ import annotations

from typing import TYPE_CHECKING

from rich.text import Text, TextType

if TYPE_CHECKING:
    from collections.abc import Callable, Iterable
    from datetime import datetime

    from rich.console import Console, ConsoleRenderable


[docs] class FluidLogRender: """Renders log by not using a table and avoiding any wrapping."""
[docs] def __init__( self, *, show_time: bool = True, show_level: bool = False, show_path: bool = True, time_format: str | Callable[[datetime], Text] = "[%x %X]", omit_repeated_times: bool = True, level_width: int | None = 8, ) -> None: """Instantiate class.""" self.show_time = show_time self.show_level = show_level self.show_path = show_path self.time_format = time_format self.omit_repeated_times = omit_repeated_times self.level_width = level_width self._last_time: Text | None = None
def __call__( self, console: Console, renderables: Iterable[ConsoleRenderable], log_time: datetime | None = None, time_format: str | Callable[[datetime], Text] | None = None, level: TextType = "", path: str | None = None, line_no: int | None = None, link_path: str | None = None, ) -> Text: result = Text() if self.show_time: if log_time is None: # cov: ignore log_time = console.get_datetime() time_format = time_format or self.time_format log_time_display = ( time_format(log_time) if callable(time_format) else Text(log_time.strftime(time_format)) ) if log_time_display == self._last_time and self.omit_repeated_times: result += Text(" " * len(log_time_display)) else: result += log_time_display self._last_time = log_time_display if self.show_level: if not isinstance(level, Text): # cov: ignore level = Text(level) # CRITICAL is the longest identifier from default set. if len(level) < 9: # cov: ignore level += " " * (9 - len(level)) result += level for elem in renderables: result += elem if self.show_path and path: path_text = Text(" ", style="repr.filename") path_text.append(path, style=f"link file://{link_path}" if link_path else "") if line_no: path_text.append(f":{line_no}") result += path_text return result