From fc6da17f7e6f31a39bf0bc32353f1397d766468b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Fri, 28 Oct 2016 14:38:11 +0200 Subject: [PATCH] formdata: always set a _raw value for file fields (#13790) --- tests/test_formdata.py | 15 +++++++++++++-- tests/test_workflows.py | 2 +- wcs/formdata.py | 12 +++++++----- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/tests/test_formdata.py b/tests/test_formdata.py index fcbdfd2..2cfbc0c 100644 --- a/tests/test_formdata.py +++ b/tests/test_formdata.py @@ -156,6 +156,17 @@ def test_file_field(pub): assert substvars.get('form_var_foo_url').endswith('/foobar/1/download?f=0') assert isinstance(substvars.get('form_var_foo_raw'), Upload) + formdata.data = {'0': None} + substvars = formdata.get_substitution_variables() + assert substvars['form_var_foo'] is None + assert substvars['form_var_foo_raw'] is None + assert substvars['form_var_foo_url'] is None + + formdata.data = {} + substvars = formdata.get_substitution_variables() + assert substvars['form_var_foo'] is None + assert substvars['form_var_foo_raw'] is None + assert substvars['form_var_foo_url'] is None def test_file_field_fargo_no_metadata(pub): document_types = { @@ -256,8 +267,8 @@ def test_file_field_no_file_with_metadata(pub): formdata.id = 1 substvars = formdata.get_substitution_variables() assert isinstance(substvars.get('form_var_foo'), NoUpload) - assert not 'form_var_foo_url' in substvars - assert not 'form_var_foo_raw' in substvars + assert substvars['form_var_foo_url'] is None + assert isinstance(substvars.get('form_var_foo_raw'), NoUpload) for key in upload.metadata: assert substvars.get('form_var_foo_%s' % key) == upload.metadata[key] diff --git a/tests/test_workflows.py b/tests/test_workflows.py index bfdc51a..40619a3 100644 --- a/tests/test_workflows.py +++ b/tests/test_workflows.py @@ -1917,7 +1917,7 @@ def test_set_backoffice_field_file(pub): formdef = FormDef() formdef.name = 'baz' formdef.fields = [ - StringField(id='00', label='File', type='file', varname='file'), + FileField(id='00', label='File', type='file', varname='file'), ] formdef.workflow_id = wf.id formdef.store() diff --git a/wcs/formdata.py b/wcs/formdata.py index 30c518f..21d6944 100644 --- a/wcs/formdata.py +++ b/wcs/formdata.py @@ -65,12 +65,14 @@ def get_dict_with_varnames(fields, data, formdata=None, varnames_only=False): new_data['var_%s' % field.varname] = display_value else: new_data['var_%s' % field.varname] = value - if isinstance(value, Upload): + if field.key == 'file': new_data['var_%s_raw' % field.varname] = value - new_data['var_%s' % field.varname] = value.base_filename - if formdata is not None: - new_data['var_%s_url' % field.varname] = '%sdownload?f=%s' % ( - formdata.get_url(), field.id) + new_data['var_%s_url' % field.varname] = None + if value and hasattr(value, 'base_filename'): + new_data['var_%s' % field.varname] = value.base_filename + if formdata is not None: + new_data['var_%s_url' % field.varname] = '%sdownload?f=%s' % ( + formdata.get_url(), field.id) elif raw_value is not None: new_data['var_%s_raw' % field.varname] = raw_value if field.store_structured_value and data is not None: -- 2.10.1