Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_undefined_variable_in_cookiecutter_dict_with_choices():
context = {
'cookiecutter': {
'hello': 'world',
'foo': ['123', '{{cookiecutter.nope}}', '456']
}
}
with pytest.raises(exceptions.UndefinedVariableInTemplate) as err:
prompt.prompt_for_config(context, no_input=True)
error = err.value
assert error.message == "Unable to render variable 'foo'"
assert error.context == context
def test_unicode_prompt_for_default_config_unicode(self, monkeypatch):
monkeypatch.setattr(
'cookiecutter.prompt.read_user_variable',
lambda var, default: default
)
context = {'cookiecutter': {'full_name': u'Řekni či napiš své jméno'}}
cookiecutter_dict = prompt.prompt_for_config(context)
assert cookiecutter_dict == {'full_name': u'Řekni či napiš své jméno'}
def test_undefined_variable_in_cookiecutter_dict():
context = {
'cookiecutter': {
'hello': 'world',
'foo': '{{cookiecutter.nope}}'
}
}
with pytest.raises(exceptions.UndefinedVariableInTemplate) as err:
prompt.prompt_for_config(context, no_input=True)
error = err.value
assert error.message == "Unable to render variable 'foo'"
assert error.context == context
def test_should_not_invoke_read_user_variable(self, mocker):
read_variable = mocker.patch('cookiecutter.prompt.read_user_variable')
read_variable.return_value = u'Audrey Roy'
prompt_choice = mocker.patch(
'cookiecutter.prompt.prompt_choice_for_config'
)
read_choice = mocker.patch('cookiecutter.prompt.read_user_choice')
CONTEXT = {'cookiecutter': {'full_name': 'Your Name'}}
cookiecutter_dict = prompt.prompt_for_config(CONTEXT)
assert not prompt_choice.called
assert not read_choice.called
read_variable.assert_called_once_with('full_name', 'Your Name')
assert cookiecutter_dict == {'full_name': u'Audrey Roy'}
lambda var, default: default
)
context = {'cookiecutter': OrderedDict([
(
'project_name',
u'A New Project'
), (
'pkg_name',
u'{{ cookiecutter.project_name|lower|replace(" ", "") }}'
)
])}
exp_cookiecutter_dict = {
'project_name': u'A New Project', 'pkg_name': u'anewproject'
}
cookiecutter_dict = prompt.prompt_for_config(context)
assert cookiecutter_dict == exp_cookiecutter_dict
def test_unicode_prompt_for_config_unicode(self, monkeypatch):
monkeypatch.setattr(
'cookiecutter.prompt.read_user_variable',
lambda var, default: u'Pizzä ïs Gööd'
)
context = {'cookiecutter': {'full_name': u'Řekni či napiš své jméno'}}
cookiecutter_dict = prompt.prompt_for_config(context)
assert cookiecutter_dict == {'full_name': u'Pizzä ïs Gööd'}
if not main_cookiecutter_directory: # pragma: no cover
raise UnableToFindCookiecutterTemplate(cookiecutter_template_dir)
context_file = cookiecutter_template_dir / "cookiecutter.json"
config_dict = get_user_config(config_file=config_file, default_config=default_config)
context = generate_context(
context_file=str(context_file),
default_context=config_dict["default_context"],
extra_context=extra_context,
)
# prompt the user to manually configure at the command line.
# except when 'no-input' flag is set
context["cookiecutter"] = prompt_for_config(context, no_input)
context["cookiecutter"]["_template"] = template_git_url
(main_cookiecutter_directory / ".cruft.json").write_text(
json_dumps({"template": template_git_url, "commit": last_commit, "context": context})
)
return generate_files(
repo_dir=cookiecutter_template_dir,
context=context,
overwrite_if_exists=overwrite_if_exists,
output_dir=output_dir,
)
if replay:
context = load(config_dict['replay_dir'], template_name)
else:
context_file = os.path.join(repo_dir, 'cookiecutter.json')
logger.debug('context_file is {}'.format(context_file))
context = generate_context(
context_file=context_file,
default_context=config_dict['default_context'],
extra_context=extra_context,
)
# prompt the user to manually configure at the command line.
# except when 'no-input' flag is set
context['cookiecutter'] = prompt_for_config(context, no_input)
# include template dir or url in the context dict
context['cookiecutter']['_template'] = template
dump(config_dict['replay_dir'], template_name, context)
# Create project from local context and project template.
result = generate_files(
repo_dir=repo_dir,
context=context,
overwrite_if_exists=overwrite_if_exists,
output_dir=output_dir
)
# Cleanup (if required)
if cleanup:
def _generate_output(
context_file: str,
cruft_state: dict,
cookiecutter_input: bool,
template_dir: str,
output_dir: str,
) -> dict:
context = generate_context(
context_file=context_file, extra_context=cruft_state["context"]["cookiecutter"]
)
context["cookiecutter"] = prompt_for_config(context, not cookiecutter_input)
context["cookiecutter"]["_template"] = cruft_state["template"]
generate_files(
repo_dir=template_dir, context=context, overwrite_if_exists=True, output_dir=output_dir
)
return context
else:
# If it's a local repo, no need to clone or copy to your cookiecutters_dir
repo_dir = input_dir
context_file = os.path.join(repo_dir, 'cookiecutter.json')
logging.debug('context_file is {0}'.format(context_file))
context = generate_context(
context_file=context_file,
default_context=config_dict['default_context']
)
# prompt the user to manually configure at the command line.
# except when 'no-input' flag is set
if not no_input:
cookiecutter_dict = prompt_for_config(context)
context['cookiecutter'] = cookiecutter_dict
# Create project from local context and project template.
generate_files(
repo_dir=repo_dir,
context=context
)