def test_create_fail_existing_env(mocker): get_env_mock = mocker.patch( "conda_env_tracker.env.get_all_existing_environment") env_name = "test-name" get_env_mock.configure_mock(return_value=env_name) with pytest.raises(Exception) as err: Environment.create(name=env_name, packages=["pandas"]) assert str(err.value) == f"Environment {env_name} already exist"
def test_replace_existing_env_success(mocker): mocker.patch("conda_env_tracker.env.delete_conda_environment") mocker.patch("conda_env_tracker.env.prompt_yes_no").return_value = True env_name = "conda_env_tracker-test-create-history" create_cmd = f"conda create --name {env_name} pandas" channels = ["conda-forge", "main"] packages = Packages.from_specs("pandas") action = "pandas=0.23=py_36" mocker.patch( "conda_env_tracker.env.get_all_existing_environment").return_value = [ env_name ] mocker.patch("conda_env_tracker.env.conda_create", mocker.Mock(return_value=create_cmd)) mocker.patch( "conda_env_tracker.env.get_dependencies", mocker.Mock(return_value={ "conda": { "pandas": Package("pandas", "*", "0.23=py_36") }, "pip": {}, }), ) mocker.patch( "conda_env_tracker.history.debug.get_pip_version", mocker.Mock(return_value="18.1"), ) mocker.patch("conda_env_tracker.env.get_conda_channels", mocker.Mock(return_value=channels)) Environment.create(name=env_name, packages=packages) writer = EnvIO(env_directory=USER_ENVS_DIR / env_name) history = writer.get_history() channel_string = "--override-channels --strict-channel-priority " + " ".join( "--channel " + channel for channel in channels) assert history.actions == [ f"conda create --name {env_name} {action} {channel_string}" ] assert history.packages == { "conda": { "pandas": Package.from_spec("pandas") } } assert history.channels == channels assert history.logs == [create_cmd] env_dir = Path(USER_ENVS_DIR) / env_name shutil.rmtree(env_dir)
def create( name: str, specs: ListLike, channels: ListLike = None, yes: bool = False, strict_channel_priority: bool = True, ) -> Environment: """create conda environment given environment name and packages to install""" cleaned = process_specs(specs) env = Environment.create( name=name, packages=cleaned, channels=channels, yes=yes, strict_channel_priority=strict_channel_priority, ) env.export() if not yes: jupyter_kernel_install_query(name=name, packages=cleaned) return env
def test_create_fail_base_env(): with pytest.raises(Exception) as err: Environment.create(name="base", packages=["pandas"]) assert str( err.value) == "Environment can not be created using default name base"