def test_install_without_pip(self): mgr = PipManager('/usr/bin', pip_installed=False) with patch.object(helpers, 'logged_exec') as mocked_exec: with patch.object(mgr, '_brute_force_install_pip') as mocked_install_pip: mgr.install('foo') self.assertEqual(mocked_install_pip.call_count, 1) mocked_exec.assert_called_with(['/usr/bin/pip', 'install', 'foo'])
def test_install_raise_error(self): mgr = PipManager(BIN_PATH, pip_installed=True) with patch.object(helpers, 'logged_exec') as mock: mock.side_effect = Exception("Kapow!") with self.assertRaises(Exception): mgr.install('foo') self.assertLoggedError("Error installing foo: Kapow!")
def test_install_with_options(self): mgr = PipManager(BIN_PATH, pip_installed=True, options=['--bar baz']) pip_path = os.path.join(BIN_PATH, 'pip') with patch.object(helpers, 'logged_exec') as mock: mgr.install('foo') mock.assert_called_with( [pip_path, 'install', 'foo', '--bar', 'baz'])
def create_venv(requested_deps, interpreter, is_current): """Create a new virtualvenv with the requirements of this script.""" # create virtualenv env = FadesEnvBuilder() env_path, env_bin_path, pip_installed = env.create_env(interpreter, is_current) venv_data = {} venv_data['env_path'] = env_path venv_data['env_bin_path'] = env_bin_path venv_data['pip_installed'] = pip_installed # install deps installed = {} for repo in requested_deps.keys(): if repo == REPO_PYPI: mgr = PipManager(env_bin_path, pip_installed=pip_installed) else: logger.warning("Install from %r not implemented", repo) continue installed[repo] = {} repo_requested = requested_deps[repo] logger.debug("Installing dependencies for repo %r: requested=%s", repo, repo_requested) for dependency in repo_requested: mgr.install(dependency) # always store the installed dependency, as in the future we'll select the venv # based on what is installed, not what used requested (remember that user may # request >, >=, etc!) project = dependency.project_name installed[repo][project] = mgr.get_version(project) logger.debug("Installed dependencies: %s", installed) return venv_data, installed
def test_install_without_pip(self): mgr = PipManager(BIN_PATH, pip_installed=False) pip_path = os.path.join(BIN_PATH, 'pip') with patch.object(helpers, 'logged_exec') as mocked_exec: with patch.object(mgr, '_brute_force_install_pip') as mocked_install_pip: mgr.install('foo') self.assertEqual(mocked_install_pip.call_count, 1) mocked_exec.assert_called_with([pip_path, 'install', 'foo'])
def test_say_hi_on_first_install(self): mgr = PipManager(BIN_PATH, pip_installed=True, options=['--bar=baz']) with patch.object(helpers, 'logged_exec'): mgr.install('foo') self.assertLoggedInfo("Hi! This is fades") logassert.setup(self, 'fades.pipmanager') mgr.install('bar') self.assertNotLoggedInfo("Hi! This is fades")
def test_install_without_pip(self): mgr = PipManager('/usr/bin', pip_installed=False) with patch.object(helpers, 'logged_exec') as mocked_exec: with patch.object( mgr, '_brute_force_install_pip') as mocked_install_pip: mgr.install('foo') self.assertEqual(mocked_install_pip.call_count, 1) mocked_exec.assert_called_with(['/usr/bin/pip', 'install', 'foo'])
def test_install_without_pip(mocker): mgr = PipManager(BIN_PATH, pip_installed=False) pip_path = os.path.join(BIN_PATH, "pip") mocked_exec = mocker.patch.object(helpers, "logged_exec") mocked_install_pip = mocker.patch.object(mgr, "_brute_force_install_pip") mgr.install("foo") assert mocked_install_pip.call_count == 1 mocked_exec.assert_called_with([pip_path, "install", "foo"])
def test_install_raise_error(mocker, logged): mgr = PipManager(BIN_PATH, pip_installed=True) mocker.patch.object(helpers, "logged_exec", side_effect=Exception("Kapow!")) with pytest.raises(Exception): mgr.install("foo") logged.assert_error("Error installing foo: Kapow!")
def test_install(mocker): mgr = PipManager(BIN_PATH, pip_installed=True) pip_path = os.path.join(BIN_PATH, "pip") mock = mocker.patch.object(helpers, "logged_exec") mgr.install("foo") # check it always upgrades pip, and then the proper install python_path = os.path.join(BIN_PATH, "python") c1 = mocker.call([python_path, "-m", "pip", "install", "pip", "--upgrade"]) c2 = mocker.call([pip_path, "install", "foo"]) assert mock.call_args_list == [c1, c2]
def create_venv(requested_deps, interpreter, is_current, options, pip_options, avoid_pip_upgrade): """Create a new virtualvenv with the requirements of this script.""" # create virtualenv env = _FadesEnvBuilder() env_path, env_bin_path, pip_installed = env.create_env( interpreter, is_current, options) venv_data = {} venv_data['env_path'] = env_path venv_data['env_bin_path'] = env_bin_path venv_data['pip_installed'] = pip_installed # install deps installed = {} for repo in requested_deps.keys(): if repo in (REPO_PYPI, REPO_VCS): mgr = PipManager(env_bin_path, pip_installed=pip_installed, options=pip_options, avoid_pip_upgrade=avoid_pip_upgrade) else: logger.warning("Install from %r not implemented", repo) continue installed[repo] = {} repo_requested = requested_deps[repo] logger.debug("Installing dependencies for repo %r: requested=%s", repo, repo_requested) for dependency in repo_requested: try: mgr.install(dependency) except Exception: logger.debug("Installation Step failed, removing virtualenv") destroy_venv(env_path) raise FadesError('Dependency installation failed') if repo == REPO_VCS: # no need to request the installed version, as we'll always compare # to the url itself project = dependency.url version = None else: # always store the installed dependency, as in the future we'll select the venv # based on what is installed, not what used requested (remember that user may # request >, >=, etc!) project = dependency.project_name version = mgr.get_version(project) installed[repo][project] = version logger.debug("Installed dependencies: %s", installed) return venv_data, installed
def create_venv(requested_deps, interpreter, is_current, options, pip_options): """Create a new virtualvenv with the requirements of this script.""" # create virtualenv env = _FadesEnvBuilder() env_path, env_bin_path, pip_installed = env.create_env(interpreter, is_current, options) venv_data = {} venv_data['env_path'] = env_path venv_data['env_bin_path'] = env_bin_path venv_data['pip_installed'] = pip_installed # install deps installed = {} for repo in requested_deps.keys(): if repo in (REPO_PYPI, REPO_VCS): mgr = PipManager(env_bin_path, pip_installed=pip_installed, options=pip_options) else: logger.warning("Install from %r not implemented", repo) continue installed[repo] = {} repo_requested = requested_deps[repo] logger.debug("Installing dependencies for repo %r: requested=%s", repo, repo_requested) for dependency in repo_requested: try: mgr.install(dependency) except Exception: logger.debug("Installation Step failed, removing virtualenv") destroy_venv(env_path) raise FadesError('Dependency installation failed') if repo == REPO_VCS: # no need to request the installed version, as we'll always compare # to the url itself project = dependency.url version = None else: # always store the installed dependency, as in the future we'll select the venv # based on what is installed, not what used requested (remember that user may # request >, >=, etc!) project = dependency.project_name version = mgr.get_version(project) installed[repo][project] = version logger.debug("Installed dependencies: %s", installed) return venv_data, installed
def test_install_with_options_using_equal(self): mgr = PipManager('/usr/bin', pip_installed=True, options=['--bar=baz']) with patch.object(helpers, 'logged_exec') as mock: mgr.install('foo') mock.assert_called_with(['/usr/bin/pip', 'install', 'foo', '--bar=baz'])
def test_install_with_options_using_equal(mocker): mgr = PipManager(BIN_PATH, pip_installed=True, options=["--bar=baz"]) pip_path = os.path.join(BIN_PATH, "pip") mock = mocker.patch.object(helpers, "logged_exec") mgr.install("foo") mock.assert_called_with([pip_path, "install", "foo", "--bar=baz"])
def test_install(self): mgr = PipManager('/usr/bin', pip_installed=True) with patch.object(helpers, 'logged_exec') as mock: mgr.install('foo') mock.assert_called_with(['/usr/bin/pip', 'install', 'foo'])
def test_install_with_options_using_equal(self): mgr = PipManager('/usr/bin', pip_installed=True, options=['--bar=baz']) with patch.object(helpers, 'logged_exec') as mock: mgr.install('foo') mock.assert_called_with( ['/usr/bin/pip', 'install', 'foo', '--bar=baz'])
def test_install_multiword_dependency(mocker): mgr = PipManager(BIN_PATH, pip_installed=True) pip_path = os.path.join(BIN_PATH, "pip") mock = mocker.patch.object(helpers, "logged_exec") mgr.install("foo bar") mock.assert_called_with([pip_path, "install", "foo", "bar"])
def test_install_multiword_dependency(self): mgr = PipManager(BIN_PATH, pip_installed=True) pip_path = os.path.join(BIN_PATH, 'pip') with patch.object(helpers, 'logged_exec') as mock: mgr.install('foo bar') mock.assert_called_with([pip_path, 'install', 'foo', 'bar'])
def test_install_with_options_using_equal(self): mgr = PipManager(BIN_PATH, pip_installed=True, options=['--bar=baz']) pip_path = os.path.join(BIN_PATH, 'pip') with patch.object(helpers, 'logged_exec') as mock: mgr.install('foo') mock.assert_called_with([pip_path, 'install', 'foo', '--bar=baz'])
def test_install_without_pip_upgrade(mocker): mgr = PipManager(BIN_PATH, pip_installed=True, avoid_pip_upgrade=True) pip_path = os.path.join(BIN_PATH, "pip") mock = mocker.patch.object(helpers, "logged_exec") mgr.install("foo") mock.assert_called_with([pip_path, "install", "foo"])