diff --git a/src/pretix/base/forms/validators.py b/src/pretix/base/forms/validators.py index 50421e2986..c6a7c2df4b 100644 --- a/src/pretix/base/forms/validators.py +++ b/src/pretix/base/forms/validators.py @@ -66,7 +66,7 @@ class PlaceholderValidator(BaseValidator): return try: - format_map(value, {key.strip('{}'): "" for key in self.limit_value}, ignore_missing_keys=False) + format_map(value, {key.strip('{}'): "" for key in self.limit_value}, raise_on_missing=True) except ValueError: raise ValidationError(self.error_message, code='invalid_placeholder_syntax') except KeyError as e: diff --git a/src/pretix/control/views/event.py b/src/pretix/control/views/event.py index 3bdb032574..15f5f68018 100644 --- a/src/pretix/control/views/event.py +++ b/src/pretix/control/views/event.py @@ -756,10 +756,12 @@ class MailSettingsPreview(EventPermissionRequiredMixin, View): with language(self.supported_locale[idx], self.request.event.settings.region): try: if k.startswith('mail_subject_'): - msgs[self.supported_locale[idx]] = format_map(bleach.clean(v), self.placeholders(preview_item), ignore_missing_keys=False) + msgs[self.supported_locale[idx]] = format_map( + bleach.clean(v), self.placeholders(preview_item), raise_on_missing=True + ) else: msgs[self.supported_locale[idx]] = markdown_compile_email( - format_map(v, self.placeholders(preview_item), ignore_missing_keys=False) + format_map(v, self.placeholders(preview_item), raise_on_missing=True) ) except ValueError: msgs[self.supported_locale[idx]] = '
{}
'.format( diff --git a/src/pretix/helpers/format.py b/src/pretix/helpers/format.py index f85c200f5c..7a31775d08 100644 --- a/src/pretix/helpers/format.py +++ b/src/pretix/helpers/format.py @@ -30,15 +30,15 @@ class SafeFormatter(Formatter): Customized version of ``str.format`` that (a) behaves just like ``str.format_map`` and (b) does not allow any unwanted shenanigans like attribute access or format specifiers. """ - def __init__(self, context, ignore_missing_keys=True): + def __init__(self, context, raise_on_missing=False): self.context = context - self.ignore_missing_keys = ignore_missing_keys + self.raise_on_missing = raise_on_missing def get_field(self, field_name, args, kwargs): return self.get_value(field_name, args, kwargs), field_name def get_value(self, key, args, kwargs): - if self.ignore_missing_keys and key not in self.context: + if not self.raise_on_missing and key not in self.context: return '{' + str(key) + '}' return self.context[key] @@ -47,7 +47,7 @@ class SafeFormatter(Formatter): return super().format_field(value, '') -def format_map(template, context, ignore_missing_keys=True): +def format_map(template, context, raise_on_missing=False): if not isinstance(template, str): template = str(template) - return SafeFormatter(context, ignore_missing_keys).format(template) + return SafeFormatter(context, raise_on_missing).format(template)