aboutsummaryrefslogtreecommitdiffstats
path: root/setuptools/tests/contexts.py
diff options
context:
space:
mode:
authorJason R. Coombs <jaraco@jaraco.com>2015-01-02 10:55:40 -0500
committerJason R. Coombs <jaraco@jaraco.com>2015-01-02 10:55:40 -0500
commit7c075fcc356078930535230fbc975b76db9d68cc (patch)
tree733b644abed78a6e02757db4b282aea319457a0a /setuptools/tests/contexts.py
parent6fbf8f8eb100b60155ace52aaad3eee076e690f0 (diff)
downloadexternal_python_setuptools-7c075fcc356078930535230fbc975b76db9d68cc.tar.gz
external_python_setuptools-7c075fcc356078930535230fbc975b76db9d68cc.tar.bz2
external_python_setuptools-7c075fcc356078930535230fbc975b76db9d68cc.zip
Extend contexts environment patching logic based on context manager in test_msvc9compiler and use it.
Diffstat (limited to 'setuptools/tests/contexts.py')
-rw-r--r--setuptools/tests/contexts.py30
1 files changed, 23 insertions, 7 deletions
diff --git a/setuptools/tests/contexts.py b/setuptools/tests/contexts.py
index 10691606..a604cd41 100644
--- a/setuptools/tests/contexts.py
+++ b/setuptools/tests/contexts.py
@@ -21,15 +21,31 @@ def tempdir(cd=lambda dir:None, **kwargs):
@contextlib.contextmanager
-def environment(**updates):
- old_env = os.environ.copy()
- os.environ.update(updates)
+def environment(**replacements):
+ """
+ In a context, patch the environment with replacements. Pass None values
+ to clear the values.
+ """
+ saved = dict(
+ (key, os.environ['key'])
+ for key in replacements
+ if key in os.environ
+ )
+
+ # remove values that are null
+ remove = (key for (key, value) in replacements.items() if value is None)
+ for key in list(remove):
+ os.environ.pop(key, None)
+ replacements.pop(key)
+
+ os.environ.update(replacements)
+
try:
- yield
+ yield saved
finally:
- for key in updates:
- del os.environ[key]
- os.environ.update(old_env)
+ for key in replacements:
+ os.environ.pop(key, None)
+ os.environ.update(saved)
@contextlib.contextmanager