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(['anaconda-project', '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 True monkeypatch.setattr( 'anaconda_project.internal.cli.console_utils.stdin_is_interactive', mock_is_interactive) def mock_console_input(prompt, encrypted): raise Exception("should not have been called") monkeypatch.setattr( 'anaconda_project.internal.cli.console_utils.console_input', mock_console_input) res = _parse_args_and_run_subcommand( ['anaconda-project', 'prepare', '--directory', dirname]) assert res == 0 out, err = capsys.readouterr() assert """Potential issues with this project: * anaconda-project.yml: Unknown field name 'weird_field' The project is ready to run commands. Use `anaconda-project list-commands` to see what's available. """ == out assert '' == err
def check(dirname): project_dir_disable_dedicated_env(dirname) code = _parse_args_and_run_subcommand([ 'anaconda-project', 'activate', '--directory', dirname, '--command', 'nope' ]) assert code == 1
def check(dirname): project_dir_disable_dedicated_env(dirname) def mock_is_interactive(): return True monkeypatch.setattr( 'anaconda_project.internal.cli.console_utils.stdin_is_interactive', mock_is_interactive) def mock_console_input(prompt, encrypted): raise Exception("should not have been called") monkeypatch.setattr( 'anaconda_project.internal.cli.console_utils.console_input', mock_console_input) res = _parse_args_and_run_subcommand( ['anaconda-project', 'prepare', '--directory', dirname]) assert res == 1 out, err = capsys.readouterr() assert err.endswith( "Conda environment is missing packages: nonexistent_package_name\n" )
def check(dirname): project_dir_disable_dedicated_env(dirname) def mock_is_interactive(): return True monkeypatch.setattr( 'anaconda_project.internal.cli.console_utils.stdin_is_interactive', mock_is_interactive) inputs = [" ", "foo", "bar"] def mock_console_input(prompt, encrypted): return inputs.pop(0) monkeypatch.setattr( 'anaconda_project.internal.cli.console_utils.console_input', mock_console_input) res = _parse_args_and_run_subcommand( ['anaconda-project', '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_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( 'anaconda_project.internal.cli.console_utils.stdin_is_interactive', mock_is_interactive) inputs = ["foo", "bar"] def mock_console_input(prompt, encrypted): return inputs.pop(0) monkeypatch.setattr( 'anaconda_project.internal.cli.console_utils.console_input', mock_console_input) def mock_set_variables(project, env_spec_name, vars_and_values, prepare_result): return SimpleStatus(success=False, description="Set variables FAIL") monkeypatch.setattr('anaconda_project.project_ops.set_variables', mock_set_variables) res = _parse_args_and_run_subcommand( ['anaconda-project', '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(['anaconda-project', '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(['anaconda-project', '--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(dirname): project_dir_disable_dedicated_env(dirname) def mock_is_interactive(): return True monkeypatch.setattr( 'anaconda_project.internal.cli.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( 'anaconda_project.internal.cli.console_utils.console_input', mock_console_input) res = _parse_args_and_run_subcommand( ['anaconda-project', '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") % DEFAULT_PROJECT_FILENAME
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(['anaconda-project', '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 prepare_redis_url(dirname): project_dir_disable_dedicated_env(dirname) result = prepare_command(dirname, ui_mode, conda_environment=None, command_name=None) assert can_connect_args['port'] == 6379 assert result
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) result = _filter_activate_result(result, ('FOO', 'PROJECT_DIR')) assert result == ("'$! boo'", quote(dirname))
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 result = _filter_activate_result(result, ('PROJECT_DIR', 'REDIS_URL')) assert result == (quote(dirname), 'redis://localhost:6379')
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=RequirementsRegistry(), 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(['anaconda-project', 'activate']) assert code == 0
def check_prepare_choose_environment_does_not_exist(dirname): project_dir_disable_dedicated_env(dirname) result = _parse_args_and_run_subcommand([ 'anaconda-project', '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 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_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 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(dirname): project_dir_disable_dedicated_env(dirname) result = _parse_args_and_run_subcommand([ 'anaconda-project', 'prepare', '--directory', dirname, '--command=with_bar' ]) assert result == 1 out, err = capsys.readouterr() assert 'nonexistent_bar' in err assert 'nonexistent_foo' not in err result = _parse_args_and_run_subcommand([ 'anaconda-project', 'prepare', '--directory', dirname, '--command=with_foo' ]) assert result == 1 out, err = capsys.readouterr() assert 'nonexistent_foo' in err assert 'nonexistent_bar' not in err
def check_fails_while_listing_installed(dirname): def sabotaged_installed_command(prefix): from anaconda_project.internal import conda_api raise conda_api.CondaError("sabotage!") monkeypatch.setattr('anaconda_project.internal.conda_api.installed', sabotaged_installed_command) project_dir_disable_dedicated_env(dirname) local_state = LocalStateFile.load_for_directory(dirname) requirement = CondaEnvRequirement( registry=RequirementsRegistry(), 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(dirname): project_dir_disable_dedicated_env(dirname) def mock_is_interactive(): return False monkeypatch.setattr( 'anaconda_project.internal.cli.console_utils.stdin_is_interactive', mock_is_interactive) def mock_console_input(prompt, encrypted): raise Exception("should not have been called") monkeypatch.setattr( 'anaconda_project.internal.cli.console_utils.console_input', mock_console_input) res = _parse_args_and_run_subcommand( ['anaconda-project', '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 = _parse_args_and_run_subcommand( ['anaconda-project', 'activate', '--directory', dirname]) assert code == 0
def main_redis_url(dirname): project_dir_disable_dedicated_env(dirname) code = main(Args(directory=dirname, all=False)) assert 1 == code