1"""Console coloring and terminal support.""" 2from typing import Any, Dict 3 4import rich 5from rich.console import Console 6from rich.syntax import Syntax 7from rich.theme import Theme 8 9_theme = Theme( 10 { 11 "info": "cyan", 12 "warning": "dim yellow", 13 "danger": "bold red", 14 "title": "yellow", 15 "error_code": "bright_red", 16 "error_title": "red", 17 "filename": "blue", 18 } 19) 20console_options: Dict[str, Any] = {"emoji": False, "theme": _theme, "soft_wrap": True} 21console_options_stderr = console_options.copy() 22console_options_stderr['stderr'] = True 23 24console = rich.get_console() 25console_stderr = Console(**console_options_stderr) 26 27 28def reconfigure(new_options: Dict[str, Any]) -> None: 29 """Reconfigure console options.""" 30 global console_options # pylint: disable=global-statement 31 global console_stderr # pylint: disable=global-statement 32 33 console_options = new_options 34 rich.reconfigure(**new_options) 35 # see https://github.com/willmcgugan/rich/discussions/484#discussioncomment-200182 36 console_options_stderr = console_options.copy() 37 console_options_stderr['stderr'] = True 38 tmp_console = Console(**console_options_stderr) 39 console_stderr.__dict__ = tmp_console.__dict__ 40 41 42def render_yaml(text: str) -> Syntax: 43 """Colorize YAMl for nice display.""" 44 return Syntax(text, 'yaml', theme="ansi_dark") 45