From 0bc8f31f5d694578cec3d0b8b4951db06fc921fb Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Thu, 1 Jan 2015 17:10:57 -0500 Subject: Move contexts to their own module --- setuptools/tests/contexts.py | 59 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 setuptools/tests/contexts.py (limited to 'setuptools/tests/contexts.py') diff --git a/setuptools/tests/contexts.py b/setuptools/tests/contexts.py new file mode 100644 index 00000000..a9626ae6 --- /dev/null +++ b/setuptools/tests/contexts.py @@ -0,0 +1,59 @@ +import tempfile +import os +import shutil +import sys +import contextlib + +from ..compat import StringIO + + +@contextlib.contextmanager +def tempdir(cd=lambda dir:None): + temp_dir = tempfile.mkdtemp() + orig_dir = os.getcwd() + try: + cd(temp_dir) + yield temp_dir + finally: + cd(orig_dir) + shutil.rmtree(temp_dir) + + +@contextlib.contextmanager +def environment(**updates): + old_env = os.environ.copy() + os.environ.update(updates) + try: + yield + finally: + for key in updates: + del os.environ[key] + os.environ.update(old_env) + + +@contextlib.contextmanager +def argv(repl): + old_argv = sys.argv[:] + sys.argv[:] = repl + yield + sys.argv[:] = old_argv + + +@contextlib.contextmanager +def quiet(): + """ + Redirect stdout/stderr to StringIO objects to prevent console output from + distutils commands. + """ + + old_stdout = sys.stdout + old_stderr = sys.stderr + new_stdout = sys.stdout = StringIO() + new_stderr = sys.stderr = StringIO() + try: + yield new_stdout, new_stderr + finally: + new_stdout.seek(0) + new_stderr.seek(0) + sys.stdout = old_stdout + sys.stderr = old_stderr -- cgit v1.2.3 From bb7a25abe65fba3fa3e8ae3973321f1fedab8e37 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Thu, 1 Jan 2015 23:47:12 -0500 Subject: Also save the ENABLE_USER_SITE setting in the user_override. --- setuptools/tests/contexts.py | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'setuptools/tests/contexts.py') diff --git a/setuptools/tests/contexts.py b/setuptools/tests/contexts.py index a9626ae6..1620bdb3 100644 --- a/setuptools/tests/contexts.py +++ b/setuptools/tests/contexts.py @@ -3,6 +3,7 @@ import os import shutil import sys import contextlib +import site from ..compat import StringIO @@ -57,3 +58,12 @@ def quiet(): new_stderr.seek(0) sys.stdout = old_stdout sys.stderr = old_stderr + + +@contextlib.contextmanager +def save_user_site_setting(): + saved = site.ENABLE_USER_SITE + try: + yield saved + finally: + site.ENABLE_USER_SITE = saved -- cgit v1.2.3 From 66ed0829c7d9e59592d0d977ac7f51e772b666f8 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Fri, 2 Jan 2015 10:03:30 -0500 Subject: Use contexts for tempdir generation --- setuptools/tests/contexts.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'setuptools/tests/contexts.py') diff --git a/setuptools/tests/contexts.py b/setuptools/tests/contexts.py index 1620bdb3..10691606 100644 --- a/setuptools/tests/contexts.py +++ b/setuptools/tests/contexts.py @@ -9,8 +9,8 @@ from ..compat import StringIO @contextlib.contextmanager -def tempdir(cd=lambda dir:None): - temp_dir = tempfile.mkdtemp() +def tempdir(cd=lambda dir:None, **kwargs): + temp_dir = tempfile.mkdtemp(**kwargs) orig_dir = os.getcwd() try: cd(temp_dir) -- cgit v1.2.3 From 7c075fcc356078930535230fbc975b76db9d68cc Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Fri, 2 Jan 2015 10:55:40 -0500 Subject: Extend contexts environment patching logic based on context manager in test_msvc9compiler and use it. --- setuptools/tests/contexts.py | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) (limited to 'setuptools/tests/contexts.py') 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 -- cgit v1.2.3 From 23c128e6ba47135134c317f42f1f42426eb9ae78 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Fri, 2 Jan 2015 12:44:43 -0500 Subject: Suppress exceptions in a context for clarity, brevity, and reuse. --- setuptools/tests/contexts.py | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'setuptools/tests/contexts.py') diff --git a/setuptools/tests/contexts.py b/setuptools/tests/contexts.py index a604cd41..d06a333f 100644 --- a/setuptools/tests/contexts.py +++ b/setuptools/tests/contexts.py @@ -83,3 +83,11 @@ def save_user_site_setting(): yield saved finally: site.ENABLE_USER_SITE = saved + + +@contextlib.contextmanager +def suppress_exceptions(*excs): + try: + yield + except excs: + pass -- cgit v1.2.3