@@ -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-
28622836def 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
28742856def 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