Skip to content

Commit 931961f

Browse files
authored
fix: provide more clarification in unsafe error message (#1280)
Fixes #1269
1 parent 762195d commit 931961f

File tree

2 files changed

+27
-17
lines changed

2 files changed

+27
-17
lines changed

copier/errors.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,10 @@ class UnsafeTemplateError(CopierError):
106106
def __init__(self, features: Sequence[str]):
107107
assert features
108108
s = "s" if len(features) > 1 else ""
109-
super().__init__(f"Template uses unsafe feature{s}: {', '.join(features)}")
109+
super().__init__(
110+
f"Template uses potentially unsafe feature{s}: {', '.join(features)}.\n"
111+
"If you trust this template, consider adding the `--trust` option when running `copier copy/update`."
112+
)
110113

111114

112115
# Warnings

tests/test_unsafe.py

+23-16
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ class JinjaExtension(Extension):
3333
(
3434
{"_tasks": ["touch task.txt"]},
3535
pytest.raises(
36-
UnsafeTemplateError, match="Template uses unsafe feature: tasks"
36+
UnsafeTemplateError,
37+
match="Template uses potentially unsafe feature: tasks.",
3738
),
3839
),
3940
(
@@ -60,7 +61,7 @@ class JinjaExtension(Extension):
6061
{"_jinja_extensions": ["tests.test_unsafe.JinjaExtension"]},
6162
pytest.raises(
6263
UnsafeTemplateError,
63-
match="Template uses unsafe feature: jinja_extensions",
64+
match="Template uses potentially unsafe feature: jinja_extensions.",
6465
),
6566
),
6667
(
@@ -70,7 +71,7 @@ class JinjaExtension(Extension):
7071
},
7172
pytest.raises(
7273
UnsafeTemplateError,
73-
match="Template uses unsafe features: jinja_extensions, tasks",
74+
match="Template uses potentially unsafe features: jinja_extensions, tasks.",
7475
),
7576
),
7677
],
@@ -107,7 +108,7 @@ def test_copy_cli(
107108
else:
108109
assert retcode == 2
109110
_, err = capsys.readouterr()
110-
assert "Template uses unsafe feature: tasks" in err
111+
assert "Template uses potentially unsafe feature: tasks." in err
111112

112113

113114
@pytest.mark.parametrize(
@@ -127,21 +128,24 @@ def test_copy_cli(
127128
{"_tasks": ["touch task-old.txt"]},
128129
{},
129130
pytest.raises(
130-
UnsafeTemplateError, match="Template uses unsafe feature: tasks"
131+
UnsafeTemplateError,
132+
match="Template uses potentially unsafe feature: tasks.",
131133
),
132134
),
133135
(
134136
{},
135137
{"_tasks": ["touch task-new.txt"]},
136138
pytest.raises(
137-
UnsafeTemplateError, match="Template uses unsafe feature: tasks"
139+
UnsafeTemplateError,
140+
match="Template uses potentially unsafe feature: tasks.",
138141
),
139142
),
140143
(
141144
{"_tasks": ["touch task-old.txt"]},
142145
{"_tasks": ["touch task-new.txt"]},
143146
pytest.raises(
144-
UnsafeTemplateError, match="Template uses unsafe feature: tasks"
147+
UnsafeTemplateError,
148+
match="Template uses potentially unsafe feature: tasks.",
145149
),
146150
),
147151
(
@@ -186,7 +190,8 @@ def test_copy_cli(
186190
]
187191
},
188192
pytest.raises(
189-
UnsafeTemplateError, match="Template uses unsafe feature: migrations"
193+
UnsafeTemplateError,
194+
match="Template uses potentially unsafe feature: migrations.",
190195
),
191196
),
192197
(
@@ -200,7 +205,8 @@ def test_copy_cli(
200205
]
201206
},
202207
pytest.raises(
203-
UnsafeTemplateError, match="Template uses unsafe feature: migrations"
208+
UnsafeTemplateError,
209+
match="Template uses potentially unsafe feature: migrations.",
204210
),
205211
),
206212
(
@@ -215,7 +221,8 @@ def test_copy_cli(
215221
]
216222
},
217223
pytest.raises(
218-
UnsafeTemplateError, match="Template uses unsafe feature: migrations"
224+
UnsafeTemplateError,
225+
match="Template uses potentially unsafe feature: migrations.",
219226
),
220227
),
221228
(
@@ -228,23 +235,23 @@ def test_copy_cli(
228235
{},
229236
pytest.raises(
230237
UnsafeTemplateError,
231-
match="Template uses unsafe feature: jinja_extensions",
238+
match="Template uses potentially unsafe feature: jinja_extensions.",
232239
),
233240
),
234241
(
235242
{},
236243
{"_jinja_extensions": ["tests.test_unsafe.JinjaExtension"]},
237244
pytest.raises(
238245
UnsafeTemplateError,
239-
match="Template uses unsafe feature: jinja_extensions",
246+
match="Template uses potentially unsafe feature: jinja_extensions.",
240247
),
241248
),
242249
(
243250
{"_jinja_extensions": ["tests.test_unsafe.JinjaExtension"]},
244251
{"_jinja_extensions": ["tests.test_unsafe.JinjaExtension"]},
245252
pytest.raises(
246253
UnsafeTemplateError,
247-
match="Template uses unsafe feature: jinja_extensions",
254+
match="Template uses potentially unsafe feature: jinja_extensions",
248255
),
249256
),
250257
(
@@ -263,8 +270,8 @@ def test_copy_cli(
263270
pytest.raises(
264271
UnsafeTemplateError,
265272
match=(
266-
"Template uses unsafe features: "
267-
"jinja_extensions, migrations, tasks"
273+
"Template uses potentially unsafe features: "
274+
"jinja_extensions, migrations, tasks."
268275
),
269276
),
270277
),
@@ -372,4 +379,4 @@ def test_update_cli(
372379
else:
373380
assert retcode == 2
374381
_, err = capsys.readouterr()
375-
assert "Template uses unsafe feature: tasks" in err
382+
assert "Template uses potentially unsafe feature: tasks." in err

0 commit comments

Comments
 (0)