예제 #1
0
def test_infer_environment_package_does_not_exist(mocker):
    env_name = "infer-test"
    dependencies = {
        "conda": {
            "pandas": Package("pandas", "pandas", "0.23", "py_36")
        }
    }
    mocker.patch(
        "conda_env_tracker.history.debug.get_pip_version",
        mocker.Mock(return_value="18.1"),
    )
    mocker.patch("conda_env_tracker.env.get_all_existing_environment",
                 return_value=[env_name])
    mocker.patch("conda_env_tracker.env.get_dependencies",
                 mocker.Mock(return_value=dependencies))
    mocker.patch("conda_env_tracker.env.get_r_dependencies")

    with pytest.raises(Exception) as err:
        Environment.infer(
            name=env_name,
            packages=Packages.from_specs("pytest"),
            channels=["conda-forge", "main"],
        )
    assert str(
        err.value) == "Environment infer-test does not have pytest installed"
예제 #2
0
def infer(name: str,
          specs: ListLike,
          channels: ListLike = None) -> Environment:
    """infer environment from existing conda environment"""
    cleaned = process_specs(specs)
    env = Environment.infer(name=name, packages=cleaned, channels=channels)
    return env
예제 #3
0
def test_infer_environment_does_not_exist(mocker):
    env_name = "infer-test"
    mocker.patch("conda_env_tracker.history.get_pip_version",
                 mocker.Mock(return_value="18.1"))
    mocker.patch(
        "conda_env_tracker.env.get_all_existing_environment",
        return_value=["env-not-exist"],
    )
    with pytest.raises(Exception) as err:
        Environment.infer(
            name=env_name,
            packages=Packages.from_specs("pandas"),
            channels=["conda-forge", "main"],
        )
    assert (str(err.value) ==
            f"Environment {env_name} can not be inferred, does not exist")
예제 #4
0
def test_infer_environment_with_pip_package_success(mocker):
    env_name = "infer-test"
    dependencies = {
        "conda": {
            "pandas": Package("pandas", "pandas", "0.23", "py_36")
        },
        "pip": {
            "pytest": Package("pytest", "pytest", "0.11")
        },
    }
    mocker.patch(
        "conda_env_tracker.history.debug.get_pip_version",
        mocker.Mock(return_value="18.1"),
    )
    mocker.patch("conda_env_tracker.env.get_all_existing_environment",
                 return_value=[env_name])
    mocker.patch("conda_env_tracker.env.get_dependencies",
                 mocker.Mock(return_value=dependencies))
    mocker.patch("conda_env_tracker.env.get_r_dependencies")

    env = Environment.infer(
        name=env_name,
        packages=Packages.from_specs(["pandas", "pytest"]),
        channels=["conda-forge", "main"],
    )
    assert env.history.packages == {
        "conda": {
            "pandas": Package("pandas", "pandas", "0.23", "py_36")
        },
        "pip": {
            "pytest": Package("pytest", "pytest", "0.11")
        },
    }
    assert env.history.channels == ["conda-forge", "main"]
    assert env.history.logs == [
        f"conda create --name {env_name} pandas --override-channels --strict-channel-priority "
        "--channel conda-forge "
        "--channel main",
        "pip install pytest --index-url https://pypi.org/simple",
    ]
    assert env.history.actions == [
        f"conda create --name {env_name} pandas=0.23=py_36 "
        "--override-channels --strict-channel-priority "
        "--channel conda-forge "
        "--channel main",
        "pip install pytest==0.11 --index-url"
        " https://pypi.org/simple",
    ]
예제 #5
0
def test_infer_environment_with_spec_success(mocker):
    env_name = "infer-test"
    dependencies = {
        "conda": {
            "pandas": Package("pandas", "pandas", "0.23", "py_36")
        }
    }
    mocker.patch("conda_env_tracker.history.get_pip_version",
                 mocker.Mock(return_value="18.1"))
    mocker.patch("conda_env_tracker.env.get_all_existing_environment",
                 return_value=[env_name])
    mocker.patch("conda_env_tracker.env.get_dependencies",
                 mocker.Mock(return_value=dependencies))
    mocker.patch("conda_env_tracker.env.get_r_dependencies")

    env = Environment.infer(
        name=env_name,
        packages=Packages.from_specs("pandas=0.23"),
        channels=["conda-forge", "main"],
    )
    assert env.history.packages == {
        "conda": {
            "pandas": Package("pandas", "pandas=0.23", "0.23", "py_36")
        }
    }
    assert env.history.channels == ["conda-forge", "main"]
    assert env.history.logs == [
        f"conda create --name {env_name} pandas=0.23 --override-channels --strict-channel-priority "
        "--channel conda-forge "
        "--channel main"
    ]
    assert env.history.actions == [
        f"conda create --name {env_name} pandas=0.23=py_36 "
        "--override-channels --strict-channel-priority "
        "--channel conda-forge "
        "--channel main"
    ]