Exemplo n.º 1
0
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
Exemplo n.º 2
0
 def test_get_parsing_ok(self):
     mocked_stdout = ['Name: foo',
                      'Version: 2.0.0',
                      'Location: ~/.local/share/fades/86cc492/lib/python3.4/site-packages',
                      'Requires: ']
     mgr = PipManager(BIN_PATH, pip_installed=True)
     with patch.object(helpers, 'logged_exec') as mock:
         mock.return_value = mocked_stdout
         version = mgr.get_version('foo')
     self.assertEqual(version, '2.0.0')
Exemplo n.º 3
0
 def test_get_parsing_ok(self):
     mocked_stdout = ['Name: foo',
                      'Version: 2.0.0',
                      'Location: ~/.local/share/fades/86cc492/lib/python3.4/site-packages',
                      'Requires: ']
     mgr = PipManager(BIN_PATH, pip_installed=True)
     with patch.object(helpers, 'logged_exec') as mock:
         mock.return_value = mocked_stdout
         version = mgr.get_version('foo')
     self.assertEqual(version, '2.0.0')
Exemplo n.º 4
0
def test_real_case_levenshtein(mocker):
    mocked_stdout = [
        "Metadata-Version: 1.1",
        "Name: python-Levenshtein",
        "Version: 0.12.0",
        "License: GPL",
    ]
    mgr = PipManager(BIN_PATH, pip_installed=True)
    mocker.patch.object(helpers, "logged_exec", return_value=mocked_stdout)
    version = mgr.get_version("foo")
    assert version == "0.12.0"
Exemplo n.º 5
0
def test_get_parsing_ok_pytest(mocker):
    mocked_stdout = [
        "Name: foo",
        "Version: 2.0.0",
        "Location: ~/.local/share/fades/86cc492/lib/python3.4/site-packages",
        "Requires: ",
    ]
    mgr = PipManager(BIN_PATH, pip_installed=True)
    mocker.patch.object(helpers, "logged_exec", return_value=mocked_stdout)
    version = mgr.get_version("foo")
    assert version, "2.0.0"
Exemplo n.º 6
0
 def test_real_case_levenshtein(self):
     mocked_stdout = [
         'Metadata-Version: 1.1',
         'Name: python-Levenshtein',
         'Version: 0.12.0',
         'License: GPL',
     ]
     mgr = PipManager('/usr/bin', pip_installed=True)
     with patch.object(helpers, 'logged_exec') as mock:
         mock.return_value = mocked_stdout
         version = mgr.get_version('foo')
     self.assertEqual(version, '0.12.0')
Exemplo n.º 7
0
 def test_real_case_levenshtein(self):
     mocked_stdout = [
         'Metadata-Version: 1.1',
         'Name: python-Levenshtein',
         'Version: 0.12.0',
         'License: GPL',
     ]
     mgr = PipManager(BIN_PATH, pip_installed=True)
     with patch.object(helpers, 'logged_exec') as mock:
         mock.return_value = mocked_stdout
         version = mgr.get_version('foo')
     self.assertEqual(version, '0.12.0')
Exemplo n.º 8
0
 def test_get_parsing_error(self):
     mocked_stdout = ['Name: foo',
                      'Release: 2.0.0',
                      'Location: ~/.local/share/fades/86cc492/lib/python3.4/site-packages',
                      'Requires: ']
     mgr = PipManager(BIN_PATH, pip_installed=True)
     with patch.object(helpers, 'logged_exec') as mock:
         version = mgr.get_version('foo')
         mock.return_value = mocked_stdout
     self.assertEqual(version, '')
     self.assertLoggedError('Fades is having problems getting the installed version. '
                            'Run with -v or check the logs for details')
Exemplo n.º 9
0
 def test_get_parsing_error(self):
     mocked_stdout = ['Name: foo',
                      'Release: 2.0.0',
                      'Location: ~/.local/share/fades/86cc492/lib/python3.4/site-packages',
                      'Requires: ']
     mgr = PipManager(BIN_PATH, pip_installed=True)
     with patch.object(helpers, 'logged_exec') as mock:
         version = mgr.get_version('foo')
         mock.return_value = mocked_stdout
     self.assertEqual(version, '')
     self.assertLoggedError('Fades is having problems getting the installed version. '
                            'Run with -v or check the logs for details')
Exemplo n.º 10
0
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
Exemplo n.º 11
0
def test_get_parsing_error(mocker, logs):
    mocked_stdout = [
        "Name: foo",
        "Release: 2.0.0",
        "Location: ~/.local/share/fades/86cc492/lib/python3.4/site-packages",
        "Requires: ",
    ]
    mgr = PipManager(BIN_PATH, pip_installed=True)
    mocker.patch.object(helpers, "logged_exec", return_value=mocked_stdout)
    version = mgr.get_version("foo")

    assert version == ""
    assert ('Fades is having problems getting the installed version. '
            'Run with -v or check the logs for details') in logs.error
Exemplo n.º 12
0
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