Buckets:
| from datetime import datetime | |
| from typing import Iterable, List, Optional, TYPE_CHECKING, Union, Callable | |
| from .text import Text, TextType | |
| if TYPE_CHECKING: | |
| from .console import Console, ConsoleRenderable, RenderableType | |
| from .table import Table | |
| FormatTimeCallable = Callable[[datetime], Text] | |
| class LogRender: | |
| def __init__( | |
| self, | |
| show_time: bool = True, | |
| show_level: bool = False, | |
| show_path: bool = True, | |
| time_format: Union[str, FormatTimeCallable] = "[%x %X]", | |
| omit_repeated_times: bool = True, | |
| level_width: Optional[int] = 8, | |
| ) -> None: | |
| 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: Optional[Text] = None | |
| def __call__( | |
| self, | |
| console: "Console", | |
| renderables: Iterable["ConsoleRenderable"], | |
| log_time: Optional[datetime] = None, | |
| time_format: Optional[Union[str, FormatTimeCallable]] = None, | |
| level: TextType = "", | |
| path: Optional[str] = None, | |
| line_no: Optional[int] = None, | |
| link_path: Optional[str] = None, | |
| ) -> "Table": | |
| from .containers import Renderables | |
| from .table import Table | |
| output = Table.grid(padding=(0, 1)) | |
| output.expand = True | |
| if self.show_time: | |
| output.add_column(style="log.time") | |
| if self.show_level: | |
| output.add_column(style="log.level", width=self.level_width) | |
| output.add_column(ratio=1, style="log.message", overflow="fold") | |
| if self.show_path and path: | |
| output.add_column(style="log.path") | |
| row: List["RenderableType"] = [] | |
| if self.show_time: | |
| log_time = log_time or console.get_datetime() | |
| time_format = time_format or self.time_format | |
| if callable(time_format): | |
| log_time_display = time_format(log_time) | |
| else: | |
| log_time_display = Text(log_time.strftime(time_format)) | |
| if log_time_display == self._last_time and self.omit_repeated_times: | |
| row.append(Text(" " * len(log_time_display))) | |
| else: | |
| row.append(log_time_display) | |
| self._last_time = log_time_display | |
| if self.show_level: | |
| row.append(level) | |
| row.append(Renderables(renderables)) | |
| if self.show_path and path: | |
| path_text = Text() | |
| path_text.append( | |
| path, style=f"link file://{link_path}" if link_path else "" | |
| ) | |
| if line_no: | |
| path_text.append(":") | |
| path_text.append( | |
| f"{line_no}", | |
| style=f"link file://{link_path}#{line_no}" if link_path else "", | |
| ) | |
| row.append(path_text) | |
| output.add_row(*row) | |
| return output | |
| if __name__ == "__main__": # pragma: no cover | |
| from pip._vendor.rich.console import Console | |
| c = Console() | |
| c.print("[on blue]Hello", justify="right") | |
| c.log("[on blue]hello", justify="right") | |
Xet Storage Details
- Size:
- 3.23 kB
- Xet hash:
- 24570f224f0966bb60e488520449a066bbbe921c2e08169e4d7a631e473cb045
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.