我们从Python开源项目中,提取了以下29个代码示例,用于说明如何使用setuptools.sandbox()。
def _no_sandbox(function): def __no_sandbox(*args, **kw): try: from setuptools.sandbox import DirectorySandbox if not hasattr(DirectorySandbox, '_old'): def violation(*args): pass DirectorySandbox._old = DirectorySandbox._violation DirectorySandbox._violation = violation patched = True else: patched = False except ImportError: patched = False try: return function(*args, **kw) finally: if patched: DirectorySandbox._violation = DirectorySandbox._old del DirectorySandbox._old return __no_sandbox
def user_install_setup_context(self, *args, **kwargs): """ Wrap sandbox.setup_context to patch easy_install in that context to appear as user-installed. """ with self.orig_context(*args, **kwargs): import setuptools.command.easy_install as ei ei.__file__ = site.USER_SITE yield
def patched_setup_context(self): self.orig_context = sandbox.setup_context return mock.patch( 'setuptools.sandbox.setup_context', self.user_install_setup_context, )
def test_setup_requires_honors_fetch_params(self): """ When easy_install installs a source distribution which specifies setup_requires, it should honor the fetch parameters (such as allow-hosts, index-url, and find-links). """ # set up a server which will simulate an alternate package index. p_index = setuptools.tests.server.MockServer() p_index.start() netloc = 1 p_index_loc = urlparse(p_index.url)[netloc] if p_index_loc.endswith(':0'): # Some platforms (Jython) don't find a port to which to bind, # so skip this test for them. return with contexts.quiet(): # create an sdist that has a build-time dependency. with TestSetupRequires.create_sdist() as dist_file: with contexts.tempdir() as temp_install_dir: with contexts.environment(PYTHONPATH=temp_install_dir): ei_params = [ '--index-url', p_index.url, '--allow-hosts', p_index_loc, '--exclude-scripts', '--install-dir', temp_install_dir, dist_file, ] with sandbox.save_argv(['easy_install']): # attempt to install the dist. It should fail because # it doesn't exist. with pytest.raises(SystemExit): easy_install_pkg.main(ei_params) # there should have been two or three requests to the server # (three happens on Python 3.3a) assert 2 <= len(p_index.requests) <= 3 assert p_index.requests[0].path == '/does-not-exist/'
def test_setup_requires_honors_fetch_params(self): """ When easy_install installs a source distribution which specifies setup_requires, it should honor the fetch parameters (such as allow-hosts, index-url, and find-links). """ # set up a server which will simulate an alternate package index. p_index = setuptools.tests.server.MockServer() p_index.start() netloc = 1 p_index_loc = urllib.parse.urlparse(p_index.url)[netloc] if p_index_loc.endswith(':0'): # Some platforms (Jython) don't find a port to which to bind, # so skip this test for them. return with contexts.quiet(): # create an sdist that has a build-time dependency. with TestSetupRequires.create_sdist() as dist_file: with contexts.tempdir() as temp_install_dir: with contexts.environment(PYTHONPATH=temp_install_dir): ei_params = [ '--index-url', p_index.url, '--allow-hosts', p_index_loc, '--exclude-scripts', '--install-dir', temp_install_dir, dist_file, ] with sandbox.save_argv(['easy_install']): # attempt to install the dist. It should fail because # it doesn't exist. with pytest.raises(SystemExit): easy_install_pkg.main(ei_params) # there should have been two or three requests to the server # (three happens on Python 3.3a) assert 2 <= len(p_index.requests) <= 3 assert p_index.requests[0].path == '/does-not-exist/'
def test_devnull(self, tmpdir): with setuptools.sandbox.DirectorySandbox(str(tmpdir)): self._file_writer(os.devnull)
def test_setup_py_with_BOM(self): """ It should be possible to execute a setup.py with a Byte Order Mark """ target = pkg_resources.resource_filename(__name__, 'script-with-bom.py') namespace = types.ModuleType('namespace') setuptools.sandbox._execfile(target, vars(namespace)) assert namespace.result == 'passed'
def test_exception_trapped(self): with setuptools.sandbox.ExceptionSaver(): raise ValueError("details")
def test_exception_resumed(self): with setuptools.sandbox.ExceptionSaver() as saved_exc: raise ValueError("details") with pytest.raises(ValueError) as caught: saved_exc.resume() assert isinstance(caught.value, ValueError) assert str(caught.value) == 'details'
def test_exception_reconstructed(self): orig_exc = ValueError("details") with setuptools.sandbox.ExceptionSaver() as saved_exc: raise orig_exc with pytest.raises(ValueError) as caught: saved_exc.resume() assert isinstance(caught.value, ValueError) assert caught.value is not orig_exc
def test_no_exception_passes_quietly(self): with setuptools.sandbox.ExceptionSaver() as saved_exc: pass saved_exc.resume()
def test_unpickleable_exception(self): class CantPickleThis(Exception): "This Exception is unpickleable because it's not in globals" with setuptools.sandbox.ExceptionSaver() as saved_exc: raise CantPickleThis('detail') with pytest.raises(setuptools.sandbox.UnpickleableException) as caught: saved_exc.resume() assert str(caught.value) == "CantPickleThis('detail',)"
def test_sandbox_violation_raised_hiding_setuptools(self, tmpdir): """ When in a sandbox with setuptools hidden, a SandboxViolation should reflect a proper exception and not be wrapped in an UnpickleableException. """ def write_file(): "Trigger a SandboxViolation by writing outside the sandbox" with open('/etc/foo', 'w'): pass with pytest.raises(setuptools.sandbox.SandboxViolation) as caught: with setuptools.sandbox.save_modules(): setuptools.sandbox.hide_setuptools() with setuptools.sandbox.DirectorySandbox(str(tmpdir)): write_file() cmd, args, kwargs = caught.value.args assert cmd == 'open' assert args == ('/etc/foo', 'w') assert kwargs == {} msg = str(caught.value) assert 'open' in msg assert "('/etc/foo', 'w')" in msg