2 # SPDX-License-Identifier: GPL-2.0
4 # Utilities for printing and coloring output.
6 # Copyright (C) 2022, Google LLC.
16 """Wraps a file object, providing utilities for coloring output, etc."""
18 def __init__(self, print: bool=True, output: typing.IO[str]=sys.stdout):
22 self._use_color = output.isatty()
24 self._use_color = False
26 def print(self, message: str) -> None:
28 print(message, file=self._output)
30 def print_with_timestamp(self, message: str) -> None:
31 ts = datetime.datetime.now().strftime('%H:%M:%S')
32 self.print(f'[{ts}] {message}')
34 def _color(self, code: str, text: str) -> str:
35 if not self._use_color:
37 return code + text + _RESET
39 def red(self, text: str) -> str:
40 return self._color('\033[1;31m', text)
42 def yellow(self, text: str) -> str:
43 return self._color('\033[1;33m', text)
45 def green(self, text: str) -> str:
46 return self._color('\033[1;32m', text)
48 def color_len(self) -> int:
49 """Returns the length of the color escape codes."""
50 return len(self.red(''))
52 # Provides a default instance that prints to stdout
54 null_printer = Printer(print=False)