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