1+ from __future__ import annotations
12import io
23import os
34import sys
45
56COLORIZE = True
67
8+ # types
9+ if False :
10+ from typing import IO
11+
712
813class ANSIColors :
9- BOLD_GREEN = "\x1b [1;32m"
10- BOLD_MAGENTA = "\x1b [1;35m"
11- BOLD_RED = "\x1b [1;31m"
14+ RESET = "\x1b [0m"
15+
16+ BLACK = "\x1b [30m"
17+ BLUE = "\x1b [34m"
18+ CYAN = "\x1b [36m"
1219 GREEN = "\x1b [32m"
13- GREY = "\x1b [90m"
1420 MAGENTA = "\x1b [35m"
1521 RED = "\x1b [31m"
16- RESET = "\x1b [0m"
22+ WHITE = "\x1b [37m" # more like LIGHT GRAY
1723 YELLOW = "\x1b [33m"
1824
25+ BOLD_BLACK = "\x1b [1;30m" # DARK GRAY
26+ BOLD_BLUE = "\x1b [1;34m"
27+ BOLD_CYAN = "\x1b [1;36m"
28+ BOLD_GREEN = "\x1b [1;32m"
29+ BOLD_MAGENTA = "\x1b [1;35m"
30+ BOLD_RED = "\x1b [1;31m"
31+ BOLD_WHITE = "\x1b [1;37m" # actual WHITE
32+ BOLD_YELLOW = "\x1b [1;33m"
33+
34+ # intense = like bold but without being bold
35+ INTENSE_BLACK = "\x1b [90m"
36+ INTENSE_BLUE = "\x1b [94m"
37+ INTENSE_CYAN = "\x1b [96m"
38+ INTENSE_GREEN = "\x1b [92m"
39+ INTENSE_MAGENTA = "\x1b [95m"
40+ INTENSE_RED = "\x1b [91m"
41+ INTENSE_WHITE = "\x1b [97m"
42+ INTENSE_YELLOW = "\x1b [93m"
43+
44+ BACKGROUND_BLACK = "\x1b [40m"
45+ BACKGROUND_BLUE = "\x1b [44m"
46+ BACKGROUND_CYAN = "\x1b [46m"
47+ BACKGROUND_GREEN = "\x1b [42m"
48+ BACKGROUND_MAGENTA = "\x1b [45m"
49+ BACKGROUND_RED = "\x1b [41m"
50+ BACKGROUND_WHITE = "\x1b [47m"
51+ BACKGROUND_YELLOW = "\x1b [43m"
52+
53+ INTENSE_BACKGROUND_BLACK = "\x1b [100m"
54+ INTENSE_BACKGROUND_BLUE = "\x1b [104m"
55+ INTENSE_BACKGROUND_CYAN = "\x1b [106m"
56+ INTENSE_BACKGROUND_GREEN = "\x1b [102m"
57+ INTENSE_BACKGROUND_MAGENTA = "\x1b [105m"
58+ INTENSE_BACKGROUND_RED = "\x1b [101m"
59+ INTENSE_BACKGROUND_WHITE = "\x1b [107m"
60+ INTENSE_BACKGROUND_YELLOW = "\x1b [103m"
61+
1962
2063NoColors = ANSIColors ()
2164
@@ -24,14 +67,16 @@ class ANSIColors:
2467 setattr (NoColors , attr , "" )
2568
2669
27- def get_colors (colorize : bool = False , * , file = None ) -> ANSIColors :
70+ def get_colors (
71+ colorize : bool = False , * , file : IO [str ] | IO [bytes ] | None = None
72+ ) -> ANSIColors :
2873 if colorize or can_colorize (file = file ):
2974 return ANSIColors ()
3075 else :
3176 return NoColors
3277
3378
34- def can_colorize (* , file = None ) -> bool :
79+ def can_colorize (* , file : IO [ str ] | IO [ bytes ] | None = None ) -> bool :
3580 if file is None :
3681 file = sys .stdout
3782
@@ -64,4 +109,4 @@ def can_colorize(*, file=None) -> bool:
64109 try :
65110 return os .isatty (file .fileno ())
66111 except io .UnsupportedOperation :
67- return file .isatty ()
112+ return hasattr ( file , "isatty" ) and file .isatty ()
0 commit comments