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 = \
38 wrap_stream(orig_stdout, convert, strip, autoreset, wrap)
39 if sys.stderr is None:
42 sys.stderr = wrapped_stderr = \
43 wrap_stream(orig_stderr, convert, strip, autoreset, wrap)
47 atexit.register(reset_all)
52 if orig_stdout is not None:
53 sys.stdout = orig_stdout
54 if orig_stderr is not None:
55 sys.stderr = orig_stderr
58 @contextlib.contextmanager
59 def colorama_text(*args, **kwargs):
68 if wrapped_stdout is not None:
69 sys.stdout = wrapped_stdout
70 if wrapped_stderr is not None:
71 sys.stderr = wrapped_stderr
74 def wrap_stream(stream, convert, strip, autoreset, wrap):
76 wrapper = AnsiToWin32(stream,
77 convert=convert, strip=strip, autoreset=autoreset)
78 if wrapper.should_wrap():
79 stream = wrapper.stream