misc: do not crash on invalid file value in workflow variables (#57720)

This commit is contained in:
Frédéric Péters 2021-10-16 13:54:21 +02:00
parent 3e2476ea1c
commit 87b31ed09d
2 changed files with 45 additions and 5 deletions

View File

@ -870,6 +870,45 @@ def test_form_workflow_table_variables(pub):
assert resp.form['f2'].value == 'foobar'
def test_form_workflow_invalid_file_variable(pub):
create_superuser(pub)
create_role(pub)
FormDef.wipe()
Workflow.wipe()
workflow = Workflow(name='Workflow One')
from wcs.workflows import WorkflowVariablesFieldsFormDef
workflow.variables_formdef = WorkflowVariablesFieldsFormDef(workflow=workflow)
workflow.variables_formdef.fields = [
fields.StringField(id='1', varname='test', label='Test', type='string')
]
workflow.store()
formdef = FormDef()
formdef.name = 'form title'
formdef.fields = []
formdef.store()
formdef.workflow_id = workflow.id
formdef.store()
app = login(get_app(pub))
resp = app.get('/backoffice/forms/1/workflow-variables')
resp.forms[0]['f1'] = 'foobar'
resp = resp.forms[0].submit()
# check the value has been correctly saved
assert FormDef.get(formdef.id).workflow_options == {'test': 'foobar'}
# modify option type
workflow.variables_formdef.fields = [fields.FileField(id='1', varname='test', label='Test', type='file')]
workflow.store()
# do not crash when getting back
resp = app.get('/backoffice/forms/1/workflow-variables')
def test_form_roles(pub):
create_superuser(pub)
role = create_role(pub)

View File

@ -771,11 +771,12 @@ class FileWithPreviewWidget(CompositeWidget):
)
self.get_widget('token').set_value(self.value.token)
except Exception as e:
get_publisher().record_error(
_('Failed to set value on field "%s"') % self.field.label,
formdef=getattr(self, 'formdef', None),
exception=e,
)
if getattr(self, 'field', None):
get_publisher().record_error(
_('Failed to set value on field "%s"') % self.field.label,
formdef=getattr(self, 'formdef', None),
exception=e,
)
self.value = None
def add_media(self):