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, output: typing.IO[str]):
20 self._use_color = output.isatty()
22 def print(self, message: str) -> None:
23 print(message, file=self._output)
25 def print_with_timestamp(self, message: str) -> None:
26 ts = datetime.datetime.now().strftime('%H:%M:%S')
27 self.print(f'[{ts}] {message}')
29 def _color(self, code: str, text: str) -> str:
30 if not self._use_color:
32 return code + text + _RESET
34 def red(self, text: str) -> str:
35 return self._color('\033[1;31m', text)
37 def yellow(self, text: str) -> str:
38 return self._color('\033[1;33m', text)
40 def green(self, text: str) -> str:
41 return self._color('\033[1;32m', text)
43 def color_len(self) -> int:
44 """Returns the length of the color escape codes."""
45 return len(self.red(''))
47 # Provides a default instance that prints to stdout
48 stdout = Printer(sys.stdout)