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.1 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.1 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.1 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.1 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.1 From 72d5cc0b9ea095437bf2796298dd3658624c081e Mon Sep 17 00:00:00 2001 From: Slavek Kabrda Date: Fri, 9 Jan 2015 09:40:48 +0000 Subject: Access os.environ[key], not os.environ['key'] --- setuptools/tests/contexts.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'setuptools/tests/contexts.py') diff --git a/setuptools/tests/contexts.py b/setuptools/tests/contexts.py index d06a333f..4a461765 100644 --- a/setuptools/tests/contexts.py +++ b/setuptools/tests/contexts.py @@ -27,7 +27,7 @@ def environment(**replacements): to clear the values. """ saved = dict( - (key, os.environ['key']) + (key, os.environ[key]) for key in replacements if key in os.environ ) -- cgit v1.2.1 From 492758aff46622fb93845f96b9062dab029064f4 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Tue, 3 Feb 2015 22:28:29 +0400 Subject: Re-use context available in sandbox. --- setuptools/tests/contexts.py | 8 -------- 1 file changed, 8 deletions(-) (limited to 'setuptools/tests/contexts.py') diff --git a/setuptools/tests/contexts.py b/setuptools/tests/contexts.py index 4a461765..1d29284b 100644 --- a/setuptools/tests/contexts.py +++ b/setuptools/tests/contexts.py @@ -48,14 +48,6 @@ def environment(**replacements): os.environ.update(saved) -@contextlib.contextmanager -def argv(repl): - old_argv = sys.argv[:] - sys.argv[:] = repl - yield - sys.argv[:] = old_argv - - @contextlib.contextmanager def quiet(): """ -- cgit v1.2.1 From 06872bb0bbbeb953e90bd0941444b0d499056557 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Thu, 31 Dec 2015 11:51:01 -0500 Subject: Update vendoring technique to match that used for packaging. Ref #229. --HG-- branch : feature/issue-229 --- setuptools/tests/contexts.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'setuptools/tests/contexts.py') diff --git a/setuptools/tests/contexts.py b/setuptools/tests/contexts.py index d9dcad84..3a0ce6b5 100644 --- a/setuptools/tests/contexts.py +++ b/setuptools/tests/contexts.py @@ -5,7 +5,12 @@ import sys import contextlib import site -import six +try: + from setuptools._vendor import six +except ImportError: + # fallback to naturally-installed version; allows system packagers to + # omit vendored packages. + import six @contextlib.contextmanager -- cgit v1.2.1 From 952c1bafda1929c74c737646aa025e6ffad6632e Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Thu, 31 Dec 2015 16:30:47 -0500 Subject: Modeling after Astropy's technique for bundling libraries, the imports are now much cleaner. Thanks @embray. Ref #229. --HG-- branch : feature/issue-229 --- setuptools/tests/contexts.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) (limited to 'setuptools/tests/contexts.py') diff --git a/setuptools/tests/contexts.py b/setuptools/tests/contexts.py index 3a0ce6b5..8c9a2d3e 100644 --- a/setuptools/tests/contexts.py +++ b/setuptools/tests/contexts.py @@ -5,12 +5,7 @@ import sys import contextlib import site -try: - from setuptools._vendor import six -except ImportError: - # fallback to naturally-installed version; allows system packagers to - # omit vendored packages. - import six +from setuptools.extern import six @contextlib.contextmanager -- cgit v1.2.1 From e0e02ba96d8ee3b7be76adeec1ec9b9c3c004516 Mon Sep 17 00:00:00 2001 From: Erik Bray Date: Thu, 31 Dec 2015 13:36:36 -0500 Subject: Adds the regression test for distribute issue 323 that I attached to #207. This is to ensure that any fix to #207 does not introduce another regression. --- setuptools/tests/contexts.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'setuptools/tests/contexts.py') diff --git a/setuptools/tests/contexts.py b/setuptools/tests/contexts.py index 8c9a2d3e..ae28c7c3 100644 --- a/setuptools/tests/contexts.py +++ b/setuptools/tests/contexts.py @@ -6,6 +6,7 @@ import contextlib import site from setuptools.extern import six +import pkg_resources @contextlib.contextmanager @@ -77,6 +78,18 @@ def save_user_site_setting(): site.ENABLE_USER_SITE = saved +@contextlib.contextmanager +def save_pkg_resources_state(): + pr_state = pkg_resources.__getstate__() + # also save sys.path + sys_path = sys.path[:] + try: + yield pr_state, sys_path + finally: + sys.path[:] = sys_path + pkg_resources.__setstate__(pr_state) + + @contextlib.contextmanager def suppress_exceptions(*excs): try: -- cgit v1.2.1 From f749ccab1e55723848946c9aba5c3eddebe0b24e Mon Sep 17 00:00:00 2001 From: stepshal Date: Thu, 14 Jul 2016 09:26:06 +0700 Subject: Add missing whitespace. --- setuptools/tests/contexts.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'setuptools/tests/contexts.py') diff --git a/setuptools/tests/contexts.py b/setuptools/tests/contexts.py index ae28c7c3..535ae107 100644 --- a/setuptools/tests/contexts.py +++ b/setuptools/tests/contexts.py @@ -10,7 +10,7 @@ import pkg_resources @contextlib.contextmanager -def tempdir(cd=lambda dir:None, **kwargs): +def tempdir(cd=lambda dir: None, **kwargs): temp_dir = tempfile.mkdtemp(**kwargs) orig_dir = os.getcwd() try: -- cgit v1.2.1 From ff371f18f0076bc63da05334f7e551c1cc29e10d Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Sun, 1 Jan 2017 22:34:28 -0500 Subject: Strip out vendored packages and require them instead. Ref #581. --- setuptools/tests/contexts.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'setuptools/tests/contexts.py') diff --git a/setuptools/tests/contexts.py b/setuptools/tests/contexts.py index 535ae107..77ebecf9 100644 --- a/setuptools/tests/contexts.py +++ b/setuptools/tests/contexts.py @@ -5,7 +5,7 @@ import sys import contextlib import site -from setuptools.extern import six +import six import pkg_resources -- cgit v1.2.1 From 3d0cc355fb5e8012cb8c72f0e25042a5a44f31d6 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Fri, 24 Feb 2017 11:49:51 -0500 Subject: Revert "Merge pull request #933 from pypa/feature/581-depend-not-bundle" This reverts commit 089cdeb489a0fa94d11b7307b54210ef9aa40511, reversing changes made to aaec654d804cb78dbb6391afff721a63f26a71cd. --- setuptools/tests/contexts.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'setuptools/tests/contexts.py') diff --git a/setuptools/tests/contexts.py b/setuptools/tests/contexts.py index 77ebecf9..535ae107 100644 --- a/setuptools/tests/contexts.py +++ b/setuptools/tests/contexts.py @@ -5,7 +5,7 @@ import sys import contextlib import site -import six +from setuptools.extern import six import pkg_resources -- cgit v1.2.1 From fb7ab81a3d080422687bad71f9ae9d36eeefbee2 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Sun, 16 Aug 2020 00:29:24 -0400 Subject: Remove Python 2 compatibility --- setuptools/tests/contexts.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'setuptools/tests/contexts.py') diff --git a/setuptools/tests/contexts.py b/setuptools/tests/contexts.py index 535ae107..51ce8984 100644 --- a/setuptools/tests/contexts.py +++ b/setuptools/tests/contexts.py @@ -4,8 +4,8 @@ import shutil import sys import contextlib import site +import io -from setuptools.extern import six import pkg_resources @@ -58,8 +58,8 @@ def quiet(): old_stdout = sys.stdout old_stderr = sys.stderr - new_stdout = sys.stdout = six.StringIO() - new_stderr = sys.stderr = six.StringIO() + new_stdout = sys.stdout = io.StringIO() + new_stderr = sys.stderr = io.StringIO() try: yield new_stdout, new_stderr finally: -- cgit v1.2.1