| 12 | |
| 13 | |
| 14 | class LogRender: |
| 15 | def __init__( |
| 16 | self, |
| 17 | show_time: bool = True, |
| 18 | show_level: bool = False, |
| 19 | show_path: bool = True, |
| 20 | time_format: Union[str, FormatTimeCallable] = "[%x %X]", |
| 21 | omit_repeated_times: bool = True, |
| 22 | level_width: Optional[int] = 8, |
| 23 | ) -> None: |
| 24 | self.show_time = show_time |
| 25 | self.show_level = show_level |
| 26 | self.show_path = show_path |
| 27 | self.time_format = time_format |
| 28 | self.omit_repeated_times = omit_repeated_times |
| 29 | self.level_width = level_width |
| 30 | self._last_time: Optional[Text] = None |
| 31 | |
| 32 | def __call__( |
| 33 | self, |
| 34 | console: "Console", |
| 35 | renderables: Iterable["ConsoleRenderable"], |
| 36 | log_time: Optional[datetime] = None, |
| 37 | time_format: Optional[Union[str, FormatTimeCallable]] = None, |
| 38 | level: TextType = "", |
| 39 | path: Optional[str] = None, |
| 40 | line_no: Optional[int] = None, |
| 41 | link_path: Optional[str] = None, |
| 42 | ) -> "Table": |
| 43 | from .containers import Renderables |
| 44 | from .table import Table |
| 45 | |
| 46 | output = Table.grid(padding=(0, 1)) |
| 47 | output.expand = True |
| 48 | if self.show_time: |
| 49 | output.add_column(style="log.time") |
| 50 | if self.show_level: |
| 51 | output.add_column(style="log.level", width=self.level_width) |
| 52 | output.add_column(ratio=1, style="log.message", overflow="fold") |
| 53 | if self.show_path and path: |
| 54 | output.add_column(style="log.path") |
| 55 | row: List["RenderableType"] = [] |
| 56 | if self.show_time: |
| 57 | log_time = log_time or console.get_datetime() |
| 58 | time_format = time_format or self.time_format |
| 59 | if callable(time_format): |
| 60 | log_time_display = time_format(log_time) |
| 61 | else: |
| 62 | log_time_display = Text(log_time.strftime(time_format)) |
| 63 | if log_time_display == self._last_time and self.omit_repeated_times: |
| 64 | row.append(Text(" " * len(log_time_display))) |
| 65 | else: |
| 66 | row.append(log_time_display) |
| 67 | self._last_time = log_time_display |
| 68 | if self.show_level: |
| 69 | row.append(level) |
| 70 | |
| 71 | row.append(Renderables(renderables)) |