Skip to content

Commit c7441cf

Browse files
author
Sylvain MARIE
committed
Improved the error message when the name template is wrong in @cases_generator. Fixes #39.
1 parent fa74fd0 commit c7441cf

File tree

1 file changed

+23
-1
lines changed

1 file changed

+23
-1
lines changed

pytest_cases/main_params.py

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,11 @@ def get_all_cases(cases=None, # type: Union[Callable[[Any], Any],
279279
for m in module:
280280
m = sys.modules[this_module_object.__module__] if m is THIS_MODULE else m
281281
_cases += extract_cases_from_module(m, has_tag=has_tag, filter=filter)
282+
success = True
282283
except TypeError:
284+
success = False
285+
286+
if not success:
283287
# 'module' object is not iterable: a single module was provided
284288
m = sys.modules[this_module_object.__module__] if module is THIS_MODULE else module
285289
_cases = extract_cases_from_module(m, has_tag=has_tag, filter=filter)
@@ -349,6 +353,21 @@ def extract_cases_from_module(module, # type: ModuleType
349353
return cases
350354

351355

356+
class InvalidNamesTemplateException(Exception):
357+
"""
358+
Raised when a `@cases_generator` is used with an improper name template and formatting fails.
359+
"""
360+
def __init__(self, cases_func, names_template, params):
361+
self.cases_func = cases_func
362+
self.names_template = names_template
363+
self.params = params
364+
super(InvalidNamesTemplateException, self).__init__()
365+
366+
def __str__(self):
367+
return "Error creating the case name for case generator <%s> using name template '%s' with parameter values " \
368+
"%s. Please check the name template." % (self.cases_func.__name__, self.names_template, self.params)
369+
370+
352371
def _get_case_getter_s(f,
353372
f_code=None,
354373
cases_dct=None):
@@ -381,7 +400,10 @@ def _get_case_getter_s(f,
381400
# then this is a string formatter creating the names
382401
_formatter = names
383402
def names(**params):
384-
return _formatter.format(**params)
403+
try:
404+
return _formatter.format(**params)
405+
except Exception:
406+
raise InvalidNamesTemplateException(f, _formatter, params)
385407

386408
nb_cases_generated = len(all_param_values_combinations)
387409
if not callable(names):

0 commit comments

Comments
 (0)