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 9import datetime 10import sys 11import typing 12 13_RESET = '\033[0;0m' 14 15class 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 48stdout = Printer(sys.stdout) 49