1 # Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file.
6 from .ansitowin32 import AnsiToWin32
19 if AnsiToWin32 is not None: # Issue #74: objects might become None at exit
20 AnsiToWin32(orig_stdout).reset_all()
23 def init(autoreset=False, convert=None, strip=None, wrap=True):
25 if not wrap and any([autoreset, convert, strip]):
26 raise ValueError("wrap=False conflicts with any other arg=True")
28 global wrapped_stdout, wrapped_stderr
29 global orig_stdout, orig_stderr
31 orig_stdout = sys.stdout
32 orig_stderr = sys.stderr
34 if sys.stdout is None:
37 sys.stdout = wrapped_stdout = wrap_stream(
38 orig_stdout, convert, strip, autoreset, wrap
40 if sys.stderr is None:
43 sys.stderr = wrapped_stderr = wrap_stream(
44 orig_stderr, convert, strip, autoreset, wrap
49 atexit.register(reset_all)
54 if orig_stdout is not None:
55 sys.stdout = orig_stdout
56 if orig_stderr is not None:
57 sys.stderr = orig_stderr
60 @contextlib.contextmanager
61 def colorama_text(*args, **kwargs):
70 if wrapped_stdout is not None:
71 sys.stdout = wrapped_stdout
72 if wrapped_stderr is not None:
73 sys.stderr = wrapped_stderr
76 def wrap_stream(stream, convert, strip, autoreset, wrap):
78 wrapper = AnsiToWin32(stream, convert=convert, strip=strip, autoreset=autoreset)
79 if wrapper.should_wrap():
80 stream = wrapper.stream