1 #!/usr/bin/env python3 1 #!/usr/bin/env python3 2 # SPDX-License-Identifier: GPL-2.0 2 # SPDX-License-Identifier: GPL-2.0 3 # 3 # 4 # Utilities for printing and coloring output. 4 # Utilities for printing and coloring output. 5 # 5 # 6 # Copyright (C) 2022, Google LLC. 6 # Copyright (C) 2022, Google LLC. 7 # Author: Daniel Latypov <dlatypov@google.com> 7 # Author: Daniel Latypov <dlatypov@google.com> 8 8 9 import datetime 9 import datetime 10 import sys 10 import sys 11 import typing 11 import typing 12 12 13 _RESET = '\033[0;0m' 13 _RESET = '\033[0;0m' 14 14 15 class Printer: 15 class Printer: 16 """Wraps a file object, providing util 16 """Wraps a file object, providing utilities for coloring output, etc.""" 17 17 18 def __init__(self, output: typing.IO[s 18 def __init__(self, output: typing.IO[str]): 19 self._output = output 19 self._output = output 20 self._use_color = output.isatt 20 self._use_color = output.isatty() 21 21 22 def print(self, message: str) -> None: 22 def print(self, message: str) -> None: 23 print(message, file=self._outp 23 print(message, file=self._output) 24 24 25 def print_with_timestamp(self, message 25 def print_with_timestamp(self, message: str) -> None: 26 ts = datetime.datetime.now().s 26 ts = datetime.datetime.now().strftime('%H:%M:%S') 27 self.print(f'[{ts}] {message}' 27 self.print(f'[{ts}] {message}') 28 28 29 def _color(self, code: str, text: str) 29 def _color(self, code: str, text: str) -> str: 30 if not self._use_color: 30 if not self._use_color: 31 return text 31 return text 32 return code + text + _RESET 32 return code + text + _RESET 33 33 34 def red(self, text: str) -> str: 34 def red(self, text: str) -> str: 35 return self._color('\033[1;31m 35 return self._color('\033[1;31m', text) 36 36 37 def yellow(self, text: str) -> str: 37 def yellow(self, text: str) -> str: 38 return self._color('\033[1;33m 38 return self._color('\033[1;33m', text) 39 39 40 def green(self, text: str) -> str: 40 def green(self, text: str) -> str: 41 return self._color('\033[1;32m 41 return self._color('\033[1;32m', text) 42 42 43 def color_len(self) -> int: 43 def color_len(self) -> int: 44 """Returns the length of the c 44 """Returns the length of the color escape codes.""" 45 return len(self.red('')) 45 return len(self.red('')) 46 46 47 # Provides a default instance that prints to s 47 # Provides a default instance that prints to stdout 48 stdout = Printer(sys.stdout) 48 stdout = Printer(sys.stdout)
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.