logged errors: do not crash if formdef has been removed (#17036)

This commit is contained in:
Frédéric Péters 2017-06-20 18:23:06 +02:00
parent a86f960a99
commit 2dada36dc0
2 changed files with 27 additions and 8 deletions

View File

@ -3492,3 +3492,21 @@ def test_backoffice_logged_errors(pub):
assert LoggedError.select()[0].acked is True
resp = resp.click('Delete').follow()
assert LoggedError.count() == 0
app = get_app(pub)
resp = app.get('/test/')
resp = resp.form.submit('submit').follow()
resp = resp.form.submit('submit')
assert LoggedError.count() == 1
app = login(get_app(pub))
resp = app.get('/backoffice/workflows/%s/' % workflow.id)
assert 'ZeroDivisionError' in resp.body
resp2 = resp.click('1 error')
resp = resp2.click('ZeroDivisionError')
assert 'href="http://example.net/backoffice/management/test/' in resp.body
# remove formdef
FormDef.wipe()
resp = resp2.click('ZeroDivisionError')
assert not 'href="http://example.net/backoffice/management/test/' in resp.body

View File

@ -57,14 +57,15 @@ class LoggedErrorDirectory(Directory):
r += htmltext(' <li>%s <a href="/backoffice/workflows/%s/">%s</a></li>') % (
_('Workflow: '), workflow.id, workflow.name)
formdata = self.error.get_formdata()
if formdata:
r += htmltext(' <li>%s <a href="%s">%s</a>') % (
_('Data: '), formdata.get_url(backoffice=True),
formdata.get_display_name())
r += htmltext(' (<a href="%sinspect">%s</a>)') % (
formdata.get_url(backoffice=True), _('inspector'))
r += htmltext('</li>')
if formdef:
formdata = self.error.get_formdata()
if formdata:
r += htmltext(' <li>%s <a href="%s">%s</a>') % (
_('Data: '), formdata.get_url(backoffice=True),
formdata.get_display_name())
r += htmltext(' (<a href="%sinspect">%s</a>)') % (
formdata.get_url(backoffice=True), _('inspector'))
r += htmltext('</li>')
r += htmltext('</ul>')
parts = (N_('Exception'), N_('Stack trace (most recent call first)'),