Projet

Général

Profil

0001-workflows-store-attachment-references-as-templates-6.patch

Frédéric Péters, 20 juin 2022 10:13

Télécharger (6,35 ko)

Voir les différences:

Subject: [PATCH] workflows: store attachment references as templates (#66398)

 tests/admin_pages/test_workflow.py | 38 ++++++++++++++++++++++--------
 wcs/workflows.py                   | 19 ++++++++++++---
 2 files changed, 44 insertions(+), 13 deletions(-)
tests/admin_pages/test_workflow.py
1077 1077
    resp = app.get(item_url)
1078 1078
    assert "Attachments" in resp.text
1079 1079
    assert "Attachments (templates or Python expressions)" not in resp.text
1080
    assert resp.form['attachments$element0$choice'].value == 'form_var_upload_raw'
1080
    assert resp.form['attachments$element0$choice'].value == '{{form_var_upload_raw}}'
1081 1081
    assert len(resp.form['attachments$element0$choice'].options) == 5
1082 1082
    resp = resp.form.submit('attachments$add_element')  # add one
1083
    resp.form['attachments$element1$choice'] = 'form_var_upload2_raw'
1083
    resp.form['attachments$element1$choice'] = '{{form_var_upload2_raw}}'
1084 1084
    resp = resp.form.submit('submit')
1085 1085
    assert resp.location
1086 1086
    sendmail = Workflow.get(workflow.id).get_status(st1.id).items[0]
1087
    assert sendmail.attachments == ['form_var_upload_raw', 'form_var_upload2_raw']
1087
    assert sendmail.attachments == ['{{form_var_upload_raw}}', '{{form_var_upload2_raw}}']
1088 1088

  
1089 1089
    resp = app.get(item_url)
1090 1090
    resp = resp.form.submit('attachments$add_element')  # add one
1091
    resp.form['attachments$element2$choice'] = 'form_fbo3_3x'
1091
    resp.form['attachments$element2$choice'] = '{{form_fbo3_3x}}'
1092 1092
    resp = resp.form.submit('submit')
1093 1093
    assert resp.location
1094 1094
    sendmail = Workflow.get(workflow.id).get_status(st1.id).items[0]
1095
    assert sendmail.attachments == ['form_var_upload_raw', 'form_var_upload2_raw', 'form_fbo3_3x']
1095
    assert sendmail.attachments == ['{{form_var_upload_raw}}', '{{form_var_upload2_raw}}', '{{form_fbo3_3x}}']
1096 1096

  
1097 1097
    resp = app.get(item_url)
1098 1098
    resp = resp.form.submit('attachments$add_element')  # add one
......
1102 1102
    assert resp.location
1103 1103
    sendmail = Workflow.get(workflow.id).get_status(st1.id).items[0]
1104 1104
    assert sendmail.attachments == [
1105
        '{{form_var_upload_raw}}',
1106
        '{{form_var_upload2_raw}}',
1107
        '{{form_fbo3_3x}}',
1108
        '{"content":"foo", "filename":"bar.txt"}',
1109
    ]
1110

  
1111
    # check old attachments python expressions are converted to templates
1112
    workflow.refresh_from_storage()
1113
    workflow.get_status(st1.id).items[0].attachments = [
1105 1114
        'form_var_upload_raw',
1106 1115
        'form_var_upload2_raw',
1107
        'form_fbo3_3x',
1116
        '{"content":"foo", "filename":"bar.txt"}',
1117
    ]
1118
    workflow.store()
1119
    resp = app.get(item_url)
1120
    resp = resp.form.submit('submit')
1121
    sendmail = Workflow.get(workflow.id).get_status(st1.id).items[0]
1122
    assert sendmail.attachments == [
1123
        '{{form_var_upload_raw}}',
1124
        '{{form_var_upload2_raw}}',
1108 1125
        '{"content":"foo", "filename":"bar.txt"}',
1109 1126
    ]
1110 1127

  
......
1119 1136
    assert resp.location
1120 1137
    sendmail = Workflow.get(workflow.id).get_status(st1.id).items[0]
1121 1138
    assert sendmail.attachments == [
1122
        'form_var_upload_raw',
1123
        'form_var_upload2_raw',
1139
        '{{form_var_upload_raw}}',
1140
        '{{form_var_upload2_raw}}',
1124 1141
        '{"content":"foo", "filename":"bar.txt"}',
1125 1142
    ]
1143

  
1126 1144
    # remove all backoffice fields
1127 1145
    workflow = Workflow.get(workflow.id)
1128 1146
    workflow.backoffice_fields_formdef.fields = []
......
1133 1151
    assert resp.location
1134 1152
    sendmail = Workflow.get(workflow.id).get_status(st1.id).items[0]
1135 1153
    assert sendmail.attachments == [
1136
        'form_var_upload_raw',
1137
        'form_var_upload2_raw',
1154
        '{{form_var_upload_raw}}',
1155
        '{{form_var_upload2_raw}}',
1138 1156
        '{"content":"foo", "filename":"bar.txt"}',
1139 1157
    ]
1140 1158

  
wcs/workflows.py
2154 2154
            if any(x for x in attribute_value if isinstance(x, int)):
2155 2155
                setattr(self, roles_attribute, [str(x) for x in attribute_value])
2156 2156
                changed = True
2157
        if getattr(self, 'attachments', None):
2158
            if any(x for x in self.attachments if not x.startswith('{{')):
2159
                # convert old attachment python expression to templates
2160
                for field in self.parent.parent.get_backoffice_fields():
2161
                    if field.key != 'file':
2162
                        continue
2163
                    if field.varname:
2164
                        codename = 'form_var_%s_raw' % field.varname
2165
                    else:
2166
                        codename = 'form_f%s' % field.id.replace('-', '_')  # = form_fbo<...>
2167
                    if codename in self.attachments:
2168
                        changed = True
2169
                        self.attachments = ['{{%s}}' % x if x == codename else x for x in self.attachments]
2157 2170
        return changed
2158 2171

  
2159 2172
    def render_as_line(self):
......
2568 2581
            if field.key != 'file':
2569 2582
                continue
2570 2583
            if field.varname:
2571
                codename = 'form_var_%s_raw' % field.varname
2584
                codename = '{{form_var_%s_raw}}' % field.varname
2572 2585
            else:
2573
                codename = 'form_f%s' % field.id.replace('-', '_')  # = form_fbo<...>
2586
                codename = '{{form_f%s}}' % field.id.replace('-', '_')  # = form_fbo<...>
2574 2587
                varnameless.append(codename)
2575 2588
            attachments_options.append((codename, field.label, codename))
2576 2589
        # filter: do not consider removed fields without varname
2577 2590
        attachments = [
2578 2591
            attachment
2579 2592
            for attachment in self.attachments or []
2580
            if ((not attachment.startswith('form_fbo')) or (attachment in varnameless))
2593
            if ((not attachment.startswith('{{form_fbo')) or (attachment in varnameless))
2581 2594
        ]
2582 2595
        return attachments_options, attachments
2583 2596

  
2584
-