diff options
author | Jason R. Coombs <jaraco@jaraco.com> | 2015-01-02 10:55:40 -0500 |
---|---|---|
committer | Jason R. Coombs <jaraco@jaraco.com> | 2015-01-02 10:55:40 -0500 |
commit | 7c075fcc356078930535230fbc975b76db9d68cc (patch) | |
tree | 733b644abed78a6e02757db4b282aea319457a0a /setuptools/tests/contexts.py | |
parent | 6fbf8f8eb100b60155ace52aaad3eee076e690f0 (diff) | |
download | external_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.py | 30 |
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 |