Skip to content

Commit 72260f8

Browse files
committed
Use EnvironmentVarGuard and swap_attrs in force_not_colorized and force_not_colorized_test_class
1 parent e9aa442 commit 72260f8

File tree

1 file changed

+23
-42
lines changed

1 file changed

+23
-42
lines changed

Lib/test/support/__init__.py

Lines changed: 23 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -2833,67 +2833,48 @@ def is_slot_wrapper(name, value):
28332833
yield name, True
28342834

28352835

2836-
def _disable_terminal_color():
2837-
import _colorize
2838-
2839-
original_fn = _colorize.can_colorize
2840-
variables = {
2841-
"PYTHON_COLORS": None,
2842-
"FORCE_COLOR": None,
2843-
"NO_COLOR": None,
2844-
}
2845-
for key in variables:
2846-
variables[key] = os.environ.pop(key, None)
2847-
os.environ["NO_COLOR"] = "1"
2848-
_colorize.can_colorize = lambda: False
2849-
return original_fn, variables
2850-
2851-
2852-
def _re_enable_terminal_color(original_fn, variables):
2853-
import _colorize
2854-
2855-
_colorize.can_colorize = original_fn
2856-
del os.environ["NO_COLOR"]
2857-
for key, value in variables.items():
2858-
if value is not None:
2859-
os.environ[key] = value
2860-
2861-
28622836
def force_not_colorized(func):
28632837
"""Force the terminal not to be colorized."""
28642838
@functools.wraps(func)
28652839
def wrapper(*args, **kwargs):
2866-
try:
2867-
original_fn, variables = _disable_terminal_color()
2840+
import _colorize
2841+
from .os_helper import EnvironmentVarGuard
2842+
2843+
with (
2844+
swap_attr(_colorize, "can_colorize", lambda: False),
2845+
EnvironmentVarGuard() as env,
2846+
):
2847+
for var in {"FORCE_COLOR", "NO_COLOR", "PYTHON_COLORS"}:
2848+
env.unset(var)
2849+
env.set("NO_COLOR", "1")
2850+
28682851
return func(*args, **kwargs)
2869-
finally:
2870-
_re_enable_terminal_color(original_fn, variables)
2852+
28712853
return wrapper
28722854

28732855

28742856
def force_not_colorized_test_class(cls):
28752857
"""Force the terminal not to be colorized for the entire test class."""
28762858
original_setUpClass = cls.setUpClass
2877-
original_tearDownClass = cls.tearDownClass
28782859

28792860
@classmethod
28802861
@functools.wraps(cls.setUpClass)
28812862
def new_setUpClass(cls):
2882-
original_fn, variables = _disable_terminal_color()
2883-
cls._original_fn = original_fn
2884-
cls._variables = variables
2863+
import _colorize
2864+
from .os_helper import EnvironmentVarGuard
2865+
2866+
cls.enterClassContext(
2867+
swap_attr(_colorize, "can_colorize", lambda: False)
2868+
)
2869+
env = cls.enterClassContext(EnvironmentVarGuard())
2870+
for var in {"FORCE_COLOR", "NO_COLOR", "PYTHON_COLORS"}:
2871+
env.unset(var)
2872+
env.set("NO_COLOR", "1")
2873+
28852874
if original_setUpClass:
28862875
original_setUpClass()
28872876

2888-
@classmethod
2889-
@functools.wraps(cls.tearDownClass)
2890-
def new_tearDownClass(cls):
2891-
if original_tearDownClass:
2892-
original_tearDownClass()
2893-
_re_enable_terminal_color(cls._original_fn, cls._variables)
2894-
28952877
cls.setUpClass = new_setUpClass
2896-
cls.tearDownClass = new_tearDownClass
28972878
return cls
28982879

28992880

0 commit comments

Comments
 (0)