microproduct/atmosphericDelay/ISCEApp/site-packages/tox/util/stdlib.py

56 lines
1.6 KiB
Python

import sys
import threading
from contextlib import contextmanager
from tempfile import TemporaryFile
if sys.version_info >= (3, 8):
from importlib import metadata as importlib_metadata # noqa
else:
import importlib_metadata # noqa
def is_main_thread():
"""returns true if we are within the main thread"""
cur_thread = threading.current_thread()
if sys.version_info >= (3, 4):
return cur_thread is threading.main_thread()
else:
# noinspection PyUnresolvedReferences
return isinstance(cur_thread, threading._MainThread)
# noinspection PyPep8Naming
@contextmanager
def suppress_output():
"""suppress both stdout and stderr outputs"""
if sys.version_info >= (3, 5):
from contextlib import redirect_stderr, redirect_stdout
else:
class _RedirectStream(object):
_stream = None
def __init__(self, new_target):
self._new_target = new_target
self._old_targets = []
def __enter__(self):
self._old_targets.append(getattr(sys, self._stream))
setattr(sys, self._stream, self._new_target)
return self._new_target
def __exit__(self, exctype, excinst, exctb):
setattr(sys, self._stream, self._old_targets.pop())
class redirect_stdout(_RedirectStream):
_stream = "stdout"
class redirect_stderr(_RedirectStream):
_stream = "stderr"
with TemporaryFile("wt") as file:
with redirect_stdout(file):
with redirect_stderr(file):
yield