formdata: don't fail on digest template generation (#56764)
gitea-wip/wcs/pipeline/head Build started... Details

This commit is contained in:
Lauréline Guérin 2021-09-10 11:40:05 +02:00
parent 652a2c7a08
commit d2c6f15f06
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
2 changed files with 55 additions and 2 deletions

View File

@ -2412,7 +2412,7 @@ def test_form_digest_date(pub):
formdata.store()
assert formdef.data_class().get(formdata.id).digests['default'] == 'plop plop'
# check there's no crash when an invaliad variable is given
# check there's no crash when an invalid variable is given
formdef.digest_templates = {'default': 'plop {{ blah|date:"Y" }} plop'}
formdef.store()
formdata = formdef.data_class()()
@ -2421,6 +2421,44 @@ def test_form_digest_date(pub):
assert formdef.data_class().get(formdata.id).digests['default'] == 'plop plop'
def test_form_digest_error(pub):
if pub.is_using_postgresql():
pub.loggederror_class.wipe()
formdef = FormDef()
formdef.name = 'foobar'
formdef.url_name = 'foobar'
formdef.fields = [fields.DateField(id='0', label='date', varname='date')]
formdef.digest_templates = {'default': 'plop {{ form_var_date|list }} plop'}
formdef.store()
formdata = formdef.data_class()()
formdata.store()
assert formdef.data_class().get(formdata.id).digests['default'] == 'ERROR'
if pub.is_using_postgresql():
assert pub.loggederror_class.count() == 1
logged_error = pub.loggederror_class.select()[0]
assert logged_error.summary == 'Could not render digest (default)'
assert logged_error.formdata_id == str(formdata.id)
formdef.digest_templates = {
'default': 'plop plop',
'custom-view:foobar': 'plop {{ form_var_date|list }} plop',
}
formdef.store()
formdata = formdef.data_class()()
formdata.store()
assert formdef.data_class().get(formdata.id).digests['custom-view:foobar'] == 'ERROR'
if pub.is_using_postgresql():
assert pub.loggederror_class.count() == 2
logged_error = pub.loggederror_class.select()[1]
assert logged_error.summary == 'Could not render digest (custom view "foobar")'
assert logged_error.formdata_id == str(formdata.id)
def test_lazy_formdata_decimal_filter(pub):
formdef = FormDef()
formdef.name = 'foobar'

View File

@ -466,7 +466,22 @@ class FormData(StorableObject):
if template is None:
new_value = None
else:
new_value = Template(template, autoescape=False).render(context)
try:
new_value = Template(template, autoescape=False).render(context)
except Exception as e:
# can't fail on id_display
if attribute == 'template:default':
summary = _('Could not render digest (default)')
else:
summary = _('Could not render digest (custom view "%s")') % attribute.replace(
'template:custom-view:', ''
)
get_publisher().record_error(
summary,
formdata=self,
exception=e,
)
new_value = 'ERROR'
if attribute.startswith('template:'):
key = attribute[9:]
if new_value != (self.digests or {}).get(key):