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"
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
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")
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", ]
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" ]