53 lines
1.5 KiB
Python
53 lines
1.5 KiB
Python
|
import os
|
||
|
import sys
|
||
|
from enum import Enum
|
||
|
|
||
|
# Colors are disabled in non-TTY environments such as pipes. This means
|
||
|
# that if output is redirected to a file, it won't contain color codes.
|
||
|
# Colors are always enabled on continuous integration.
|
||
|
_colorize = bool(sys.stdout.isatty() or os.environ.get("CI"))
|
||
|
|
||
|
|
||
|
class ANSI(Enum):
|
||
|
"""
|
||
|
Enum class for adding ansi colorcodes directly into strings.
|
||
|
Automatically converts values to strings representing their
|
||
|
internal value, or an empty string in a non-colorized scope.
|
||
|
"""
|
||
|
|
||
|
RESET = "\x1b[0m"
|
||
|
|
||
|
BOLD = "\x1b[1m"
|
||
|
ITALIC = "\x1b[3m"
|
||
|
UNDERLINE = "\x1b[4m"
|
||
|
STRIKETHROUGH = "\x1b[9m"
|
||
|
REGULAR = "\x1b[22;23;24;29m"
|
||
|
|
||
|
BLACK = "\x1b[30m"
|
||
|
RED = "\x1b[31m"
|
||
|
GREEN = "\x1b[32m"
|
||
|
YELLOW = "\x1b[33m"
|
||
|
BLUE = "\x1b[34m"
|
||
|
MAGENTA = "\x1b[35m"
|
||
|
CYAN = "\x1b[36m"
|
||
|
WHITE = "\x1b[37m"
|
||
|
|
||
|
PURPLE = "\x1b[38;5;93m"
|
||
|
PINK = "\x1b[38;5;206m"
|
||
|
ORANGE = "\x1b[38;5;214m"
|
||
|
GRAY = "\x1b[38;5;244m"
|
||
|
|
||
|
def __str__(self) -> str:
|
||
|
global _colorize
|
||
|
return str(self.value) if _colorize else ""
|
||
|
|
||
|
|
||
|
def print_warning(*values: object) -> None:
|
||
|
"""Prints a warning message with formatting."""
|
||
|
print(f"{ANSI.YELLOW}{ANSI.BOLD}WARNING:{ANSI.REGULAR}", *values, ANSI.RESET, file=sys.stderr)
|
||
|
|
||
|
|
||
|
def print_error(*values: object) -> None:
|
||
|
"""Prints an error message with formatting."""
|
||
|
print(f"{ANSI.RED}{ANSI.BOLD}ERROR:{ANSI.REGULAR}", *values, ANSI.RESET, file=sys.stderr)
|