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