def check(dirname): project_dir_disable_dedicated_env(dirname) def mock_is_interactive(): return True monkeypatch.setattr( 'conda_kapsel.commands.console_utils.stdin_is_interactive', mock_is_interactive) def mock_console_input(prompt, encrypted): raise Exception("Should not have called this, prompt " + prompt) monkeypatch.setattr( 'conda_kapsel.commands.console_utils.console_input', mock_console_input) res = _parse_args_and_run_subcommand( ['conda-kapsel', 'prepare', '--directory', dirname]) assert res == 1 out, err = capsys.readouterr() assert out == "" assert err == ( "%s: env_specs should be a dictionary from environment name to environment attributes, not 42\n" "Unable to load the project.\n") % os.path.join( dirname, "kapsel.yml")
def check_run_main(dirname): from os.path import abspath as real_abspath def mock_abspath(path): if path == ".": return dirname else: return real_abspath(path) monkeypatch.setattr('os.path.abspath', mock_abspath) project_dir_disable_dedicated_env(dirname) result = _parse_args_and_run_subcommand(['conda-kapsel', '--verbose', 'run', '--directory', dirname, 'default']) assert 1 == result assert 'file' in executed assert 'args' in executed assert 'env' in executed assert executed['file'].endswith(python_exe) assert executed['args'][0].endswith(python_exe) assert len(executed['args']) == 2 assert '--version' == executed['args'][1] # conda info is cached so may not be here depending on # which other tests run log_lines = ["$ conda info --json", "$ %s --version" % executed['args'][0]] log_lines_without_conda_info = log_lines[1:] def nl(lines): return ("\n".join(lines) + "\n") out, err = capsys.readouterr() assert "" == out assert nl(log_lines) == err or nl(log_lines_without_conda_info) == err
def check_run_main(dirname): from os.path import abspath as real_abspath def mock_abspath(path): if path == ".": return dirname else: return real_abspath(path) monkeypatch.setattr('os.path.abspath', mock_abspath) project_dir_disable_dedicated_env(dirname) # double hyphen lets us specify "--foo" as a command name result = _parse_args_and_run_subcommand([ 'conda-kapsel', 'run', '--directory', dirname, '--', '--foo', '--bar' ]) assert 1 == result assert 'file' in executed assert 'args' in executed assert 'env' in executed assert executed['file'].endswith(python_exe) assert executed['args'][0].endswith(python_exe) assert len(executed['args']) == 3 assert '--version' == executed['args'][1] assert '--bar' == executed['args'][2]
def check_run_main(dirname): from os.path import abspath as real_abspath def mock_abspath(path): if path == ".": return dirname else: return real_abspath(path) monkeypatch.setattr('os.path.abspath', mock_abspath) project_dir_disable_dedicated_env(dirname) for n, i in enumerate(command_line): if i == '<DIRNAME>': command_line[n] = dirname result = _parse_args_and_run_subcommand(command_line) assert 1 == result assert 'file' in executed assert 'args' in executed assert 'env' in executed file_assertion(executed['file']) out, err = capsys.readouterr() assert "" == out assert "" == err return executed['args'][1:]
def check(dirname): project_dir_disable_dedicated_env(dirname) def mock_is_interactive(): return True monkeypatch.setattr( 'conda_kapsel.commands.console_utils.stdin_is_interactive', mock_is_interactive) inputs = ["foo", "bar"] def mock_console_input(prompt, encrypted): return inputs.pop(0) monkeypatch.setattr( 'conda_kapsel.commands.console_utils.console_input', mock_console_input) def mock_set_variables(project, vars_and_values): return SimpleStatus(success=False, description="Set variables FAIL") monkeypatch.setattr('conda_kapsel.project_ops.set_variables', mock_set_variables) res = _parse_args_and_run_subcommand( ['conda-kapsel', 'prepare', '--directory', dirname]) assert res == 1 out, err = capsys.readouterr() assert err == _foo_and_bar_missing + "Set variables FAIL\n"
def check_run_main(dirname): from os.path import abspath as real_abspath def mock_abspath(path): if path == ".": return dirname else: return real_abspath(path) monkeypatch.setattr('os.path.abspath', mock_abspath) def mock_execvpe(file, args, env): assert file == 'nope' assert args == ['nope'] raise OSError("no such file nope") monkeypatch.setattr('os.execvpe', mock_execvpe) project_dir_disable_dedicated_env(dirname) result = _parse_args_and_run_subcommand(['conda-kapsel', 'run', '--directory', dirname, 'nope']) assert 1 == result out, err = capsys.readouterr() assert "" == out assert "Failed to execute 'nope'" in err
def check_run_main(dirname): from os.path import abspath as real_abspath def mock_abspath(path): if path == ".": return dirname else: return real_abspath(path) monkeypatch.setattr('os.path.abspath', mock_abspath) project_dir_disable_dedicated_env(dirname) result = _parse_args_and_run_subcommand(['conda-kapsel', 'run', '--directory', dirname, 'default', 'foo', '$PATH', '--something']) assert 1 == result assert 'file' in executed assert 'args' in executed assert 'env' in executed assert executed['file'].endswith(python_exe) assert executed['args'][0].endswith(python_exe) assert len(executed['args']) == 5 assert '--version' == executed['args'][1] assert 'foo' == executed['args'][2] assert '$PATH' == executed['args'][3] assert '--something' == executed['args'][4]
def check_run_main(dirname): from os.path import abspath as real_abspath def mock_abspath(path): if path == ".": return dirname else: return real_abspath(path) monkeypatch.setattr('os.path.abspath', mock_abspath) def mock_execvpe(file, args, env): assert file == 'nope' assert args == ['nope'] raise OSError("no such file nope") monkeypatch.setattr('os.execvpe', mock_execvpe) project_dir_disable_dedicated_env(dirname) result = _parse_args_and_run_subcommand( ['conda-kapsel', 'run', '--directory', dirname, 'nope']) assert 1 == result out, err = capsys.readouterr() assert "" == out assert "Failed to execute 'nope'" in err
def check_run_main(dirname): from os.path import abspath as real_abspath def mock_abspath(path): if path == ".": return dirname else: return real_abspath(path) monkeypatch.setattr('os.path.abspath', mock_abspath) project_dir_disable_dedicated_env(dirname) result = _parse_args_and_run_subcommand([ 'conda-kapsel', 'run', '--directory', dirname, 'default', 'foo', '$PATH', '--something' ]) assert 1 == result assert 'file' in executed assert 'args' in executed assert 'env' in executed assert executed['file'].endswith(python_exe) assert executed['args'][0].endswith(python_exe) assert len(executed['args']) == 5 assert '--version' == executed['args'][1] assert 'foo' == executed['args'][2] assert '$PATH' == executed['args'][3] assert '--something' == executed['args'][4]
def check(dirname): project_dir_disable_dedicated_env(dirname) def mock_is_interactive(): return True monkeypatch.setattr( 'conda_kapsel.commands.console_utils.stdin_is_interactive', mock_is_interactive) inputs = [" ", "foo", "bar"] def mock_console_input(prompt, encrypted): return inputs.pop(0) monkeypatch.setattr( 'conda_kapsel.commands.console_utils.console_input', mock_console_input) res = _parse_args_and_run_subcommand( ['conda-kapsel', 'prepare', '--directory', dirname]) assert res == 0 local_state = LocalStateFile.load_for_directory(dirname) assert local_state.get_value(['variables', 'FOO']) == 'foo' assert local_state.get_value(['variables', 'BAR']) == 'bar'
def check_run_no_app_entry(dirname): project_dir_disable_dedicated_env(dirname) result = run_command(dirname, UI_MODE_TEXT_ASSUME_YES_DEVELOPMENT, conda_environment=None, command_name=None, extra_command_args=None) assert result is None
def activate_foo(dirname): project_dir_disable_dedicated_env(dirname) result = activate(dirname, UI_MODE_TEXT_ASSUME_YES_DEVELOPMENT, conda_environment=None, command_name=None) assert result is not None if platform.system() == 'Windows': result = [line for line in result if not line.startswith("export PATH")] print("activate changed PATH on Windows and ideally it would not.") assert ["export FOO='$! boo'", 'export PROJECT_DIR=' + quote(dirname)] == result
def check_conda_default_env_is_bogus(dirname): requirement = _empty_default_requirement() project_dir_disable_dedicated_env(dirname) local_state = LocalStateFile.load_for_directory(dirname) status = requirement.check_status( minimal_environ_no_conda_env(**{'PROJECT_DIR': dirname}), local_state, 'default', UserConfigOverrides(inherited_env="not_a_real_env_anyone_has")) expected = "'not_a_real_env_anyone_has' doesn't look like it contains a Conda environment yet." assert expected == status.status_description
def check_conda_default_env_not_set(dirname): requirement = _empty_default_requirement() project_dir_disable_dedicated_env(dirname) local_state = LocalStateFile.load_for_directory(dirname) status = requirement.check_status( minimal_environ_no_conda_env(PROJECT_DIR=dirname), local_state, 'default', UserConfigOverrides()) expected = "'{}' doesn't look like it contains a Conda environment yet.".format( os.path.join(dirname, 'envs', 'default')) assert expected == status.status_description
def check_run_main(dirname): project_dir_disable_dedicated_env(dirname) result = main(Args(directory=dirname)) assert 1 == result assert 'file' in executed assert 'args' in executed assert 'env' in executed assert executed['file'].endswith(python_exe) assert executed['args'][0].endswith(python_exe) assert '--version' == executed['args'][1]
def check_missing_package(dirname): requirement = CondaEnvRequirement( registry=PluginRegistry(), env_specs=dict(default=EnvSpec('default', ['boguspackage', 'boguspackage2'], []))) project_dir_disable_dedicated_env(dirname) local_state = LocalStateFile.load_for_directory(dirname) environ = minimal_environ(PROJECT_DIR=dirname) status = requirement.check_status(environ, local_state, 'default', UserConfigOverrides(inherited_env=environ.get(conda_env_var))) assert "Conda environment is missing packages: boguspackage, boguspackage2" == status.status_description
def check_conda_default_env_not_set(dirname): requirement = _empty_default_requirement() project_dir_disable_dedicated_env(dirname) local_state = LocalStateFile.load_for_directory(dirname) status = requirement.check_status( minimal_environ_no_conda_env(PROJECT_DIR=dirname), local_state, 'default', UserConfigOverrides()) expected = "'{}' doesn't look like it contains a Conda environment yet.".format(os.path.join(dirname, 'envs', 'default')) assert expected == status.status_description
def check_missing_package(dirname): requirement = CondaEnvRequirement( registry=PluginRegistry(), env_specs=dict(default=EnvSpec( 'default', ['boguspackage', 'boguspackage2'], []))) project_dir_disable_dedicated_env(dirname) local_state = LocalStateFile.load_for_directory(dirname) environ = minimal_environ(PROJECT_DIR=dirname) status = requirement.check_status( environ, local_state, 'default', UserConfigOverrides(inherited_env=environ.get(conda_env_var))) assert "Conda environment is missing packages: boguspackage, boguspackage2" == status.status_description
def main_redis_url(dirname): from os.path import abspath as real_abspath def mock_abspath(path): if path == ".": return dirname else: return real_abspath(path) monkeypatch.setattr('os.path.abspath', mock_abspath) project_dir_disable_dedicated_env(dirname) code = _parse_args_and_run_subcommand(['conda-kapsel', 'activate']) assert code == 0
def activate_foo(dirname): project_dir_disable_dedicated_env(dirname) result = activate(dirname, UI_MODE_TEXT_ASSUME_YES_DEVELOPMENT, conda_environment=None) assert result is not None if platform.system() == 'Windows': result = [ line for line in result if not line.startswith("export PATH") ] print("activate changed PATH on Windows and ideally it would not.") assert ["export FOO='$! boo'", 'export PROJECT_DIR=' + quote(dirname)] == result
def activate_redis_url(dirname): project_dir_disable_dedicated_env(dirname) result = activate(dirname, UI_MODE_TEXT_ASSUME_YES_DEVELOPMENT, conda_environment=None, command_name=None) assert can_connect_args['port'] == 6379 assert result is not None if platform.system() == 'Windows': result = [line for line in result if not line.startswith("export PATH")] print("activate changed PATH on Windows and ideally it would not.") if len(result) > 2: import os print("os.environ=" + repr(os.environ)) print("result=" + repr(result)) assert ['export PROJECT_DIR=' + quote(dirname), 'export REDIS_URL=redis://localhost:6379'] == result
def check_prepare_choose_environment_does_not_exist(dirname): project_dir_disable_dedicated_env(dirname) result = _parse_args_and_run_subcommand([ 'conda-kapsel', 'prepare', '--directory', dirname, '--env-spec=nope' ]) assert result == 1 expected_error = ( "Environment name 'nope' is not in %s, these names were found: bar, foo" % os.path.join(dirname, DEFAULT_PROJECT_FILENAME)) out, err = capsys.readouterr() assert out == "" assert expected_error in err
def check_run(dirname): project_dir_disable_dedicated_env(dirname) result = run_command(dirname, UI_MODE_TEXT_ASSUME_YES_DEVELOPMENT, conda_environment=None, command_name=None, extra_command_args=None) assert result is None assert 'file' in executed assert 'args' in executed assert 'env' in executed assert executed['file'].endswith(python_exe) assert executed['args'][0].endswith(python_exe) assert '--version' == executed['args'][1] assert 'bar' == executed['env']['FOO']
def check_fails_while_listing_installed(dirname): def sabotaged_installed_command(prefix): from conda_kapsel.internal import conda_api raise conda_api.CondaError("sabotage!") monkeypatch.setattr('conda_kapsel.internal.conda_api.installed', sabotaged_installed_command) project_dir_disable_dedicated_env(dirname) local_state = LocalStateFile.load_for_directory(dirname) requirement = CondaEnvRequirement(registry=PluginRegistry(), env_specs=dict(default=EnvSpec('default', ['not_a_real_package'], []))) environ = minimal_environ(PROJECT_DIR=dirname) status = requirement.check_status(environ, local_state, 'default', UserConfigOverrides(inherited_env=environ.get(conda_env_var))) assert status.status_description.startswith("Conda failed while listing installed packages in ") assert status.status_description.endswith(": sabotage!")
def activate_redis_url(dirname): project_dir_disable_dedicated_env(dirname) result = activate(dirname, UI_MODE_TEXT_ASSUME_YES_DEVELOPMENT, conda_environment=None) assert can_connect_args['port'] == 6379 assert result is not None if platform.system() == 'Windows': result = [ line for line in result if not line.startswith("export PATH") ] print("activate changed PATH on Windows and ideally it would not.") if len(result) > 2: import os print("os.environ=" + repr(os.environ)) print("result=" + repr(result)) assert [ 'export PROJECT_DIR=' + quote(dirname), 'export REDIS_URL=redis://localhost:6379' ] == result
def check_fails_while_listing_installed(dirname): def sabotaged_installed_command(prefix): from conda_kapsel.internal import conda_api raise conda_api.CondaError("sabotage!") monkeypatch.setattr('conda_kapsel.internal.conda_api.installed', sabotaged_installed_command) project_dir_disable_dedicated_env(dirname) local_state = LocalStateFile.load_for_directory(dirname) requirement = CondaEnvRequirement( registry=PluginRegistry(), env_specs=dict( default=EnvSpec('default', ['not_a_real_package'], []))) environ = minimal_environ(PROJECT_DIR=dirname) status = requirement.check_status( environ, local_state, 'default', UserConfigOverrides(inherited_env=environ.get(conda_env_var))) assert status.status_description.startswith( "Conda failed while listing installed packages in ") assert status.status_description.endswith(": sabotage!")
def check_run_main(dirname): from os.path import abspath as real_abspath def mock_abspath(path): if path == ".": return dirname else: return real_abspath(path) monkeypatch.setattr('os.path.abspath', mock_abspath) project_dir_disable_dedicated_env(dirname) # double hyphen lets us specify "--foo" as a command name result = _parse_args_and_run_subcommand(['conda-kapsel', 'run', '--directory', dirname, '--', '--foo', '--bar']) assert 1 == result assert 'file' in executed assert 'args' in executed assert 'env' in executed assert executed['file'].endswith(python_exe) assert executed['args'][0].endswith(python_exe) assert len(executed['args']) == 3 assert '--version' == executed['args'][1] assert '--bar' == executed['args'][2]
def check(dirname): project_dir_disable_dedicated_env(dirname) def mock_is_interactive(): return False monkeypatch.setattr( 'conda_kapsel.commands.console_utils.stdin_is_interactive', mock_is_interactive) def mock_console_input(prompt, encrypted): raise Exception("should not have been called") monkeypatch.setattr( 'conda_kapsel.commands.console_utils.console_input', mock_console_input) res = _parse_args_and_run_subcommand( ['conda-kapsel', 'prepare', '--directory', dirname]) assert res == 1 out, err = capsys.readouterr() assert err == _foo_and_bar_missing
def check_run_main(dirname): project_dir_disable_dedicated_env(dirname) result = main(Args(directory=dirname)) assert 1 == result
def main_redis_url(dirname): project_dir_disable_dedicated_env(dirname) code = main(Args(directory=dirname)) assert 1 == code
def check(dirname): project_dir_disable_dedicated_env(dirname) code = _parse_args_and_run_subcommand(['conda-kapsel', 'activate', '--directory', dirname, '--command', 'nope']) assert code == 1
def main_redis_url(dirname): project_dir_disable_dedicated_env(dirname) code = _parse_args_and_run_subcommand(['conda-kapsel', 'activate', '--directory', dirname]) assert code == 0
def main_redis_url(dirname): project_dir_disable_dedicated_env(dirname) main(Args(directory=dirname))
def prepare_redis_url(dirname): project_dir_disable_dedicated_env(dirname) result = prepare_command(dirname, ui_mode, conda_environment=None) assert can_connect_args['port'] == 6379 assert result
def main_redis_url(dirname): project_dir_disable_dedicated_env(dirname) main(Args(directory=dirname, mode='browser'))
def main_redis_url(dirname): project_dir_disable_dedicated_env(dirname) code = _parse_args_and_run_subcommand([ 'conda-kapsel', 'prepare', '--directory', dirname, '--mode=browser' ]) assert code == 0