Projet

Général

Profil

0001-workflows-set-bo-fields-to-empty-value-only-if-value.patch

Thomas Noël, 16 juillet 2020 00:46

Télécharger (2,82 ko)

Voir les différences:

Subject: [PATCH] workflows: set bo fields to empty value only if value before
 compute is empty (#45135)

 tests/test_workflows.py     | 12 +++++++++++-
 wcs/wf/backoffice_fields.py | 17 ++++++++---------
 2 files changed, 19 insertions(+), 10 deletions(-)
tests/test_workflows.py
3784 3784
    formdata = formdef.data_class().get(formdata.id)
3785 3785
    assert formdata.data['bo1'] is None
3786 3786

  
3787
    # check a value computed as the empty string is stored as an empty string, not None
3788
    item.fields = [{'field_id': 'bo1', 'value': '=""'}]
3789
    item.perform(formdata)
3790
    formdata = formdef.data_class().get(formdata.id)
3791
    assert formdata.data['bo1'] == ''
3792
    item.fields = [{'field_id': 'bo1', 'value': '{{ does_not_exist }}'}]
3793
    item.perform(formdata)
3794
    formdata = formdef.data_class().get(formdata.id)
3795
    assert formdata.data['bo1'] == ''
3796

  
3787 3797
    assert LoggedError.count() == 0
3788 3798

  
3789 3799
    item.fields = [{'field_id': 'bo1', 'value': '= ~ invalid python ~'}]
......
4233 4243

  
4234 4244
    # invalid values => do nothing
4235 4245
    assert LoggedError.count() == 0
4236
    for value in ('plop', {}, []):
4246
    for value in ('plop', '={}', '=[]'):
4237 4247
        item = SetBackofficeFieldsWorkflowStatusItem()
4238 4248
        item.parent = st1
4239 4249
        item.fields = [{'field_id': 'bo1', 'value': value}]
wcs/wf/backoffice_fields.py
119 119
            except IndexError:
120 120
                continue
121 121

  
122
            try:
123
                new_value = self.compute(field['value'], raises=True,
124
                                         formdata=formdata, status_item=self)
125
            except:
126
                continue
127

  
128
            if new_value == '':
129
                # assign empty strings as None, as that will work for all field
130
                # types
122
            if not field.get('value'):
123
                # assign empty value as None, as that will work for all field types
131 124
                new_value = None
125
            else:
126
                try:
127
                    new_value = self.compute(field['value'], raises=True,
128
                                             formdata=formdata, status_item=self)
129
                except:
130
                    continue
132 131

  
133 132
            if formdef_field.convert_value_from_anything:
134 133
                try:
135
-