Projet

Général

Profil

0002-formdata-ease-iteration-of-evolutions-parts-33186.patch

Benjamin Dauvergne, 09 novembre 2019 17:51

Télécharger (5,7 ko)

Voir les différences:

Subject: [PATCH 2/3] formdata: ease iteration of evolutions parts (#33186)

 wcs/formdata.py      |  5 +++++
 wcs/formdef.py       |  7 +++----
 wcs/wf/attachment.py | 16 +++++++---------
 wcs/workflows.py     | 41 ++++++++++++++++-------------------------
 4 files changed, 31 insertions(+), 38 deletions(-)
wcs/formdata.py
1095 1095
            field.feed_session(self.data.get(field.id),
1096 1096
                    self.data.get('%s_display' % field.id))
1097 1097

  
1098
    def iter_evolution_parts(self):
1099
        for evo in self.evolution or []:
1100
            for part in evo.parts or []:
1101
                yield part
1102

  
1098 1103
    def __getattr__(self, attr):
1099 1104
        try:
1100 1105
            return self.__dict__[attr]
wcs/formdef.py
1604 1604
                for field_data in (formdata.data or {}).values() + (formdata.workflow_data or {}).values():
1605 1605
                    if is_upload(field_data):
1606 1606
                        yield field_data.get_filename()
1607
                for evolution in (formdata.evolution or []):
1608
                    for part in (evolution.parts or []):
1609
                        if is_attachment(part):
1610
                            yield part.filename
1607
                for part in formdata.iter_evolution_parts():
1608
                    if is_attachment(part):
1609
                        yield part.filename
1611 1610
        for user in publisher.user_class.select():
1612 1611
            for field_data in (user.form_data or {}).values():
1613 1612
                if is_upload(field_data):
wcs/wf/attachment.py
34 34
    else:
35 35
        file_reference = None
36 36

  
37
    for evo in self.formdata.evolution:
38
        if evo.parts:
39
            for p in evo.parts:
40
                if not isinstance(p, AttachmentEvolutionPart):
41
                    continue
42
                if file_reference and os.path.basename(p.filename) != file_reference:
43
                    continue
44
                if p.base_filename == filename:
45
                    return p
37
    for p in self.formdata.iter_evolution_parts():
38
        if not isinstance(p, AttachmentEvolutionPart):
39
            continue
40
        if file_reference and os.path.basename(p.filename) != file_reference:
41
            continue
42
        if p.base_filename == filename:
43
            return p
46 44

  
47 45

  
48 46
def form_attachment(self):
wcs/workflows.py
121 121

  
122 122

  
123 123
class NamedAttachmentsSubstitutionProxy(object):
124
    def __init__(self, formdata, varname):
124
    def __init__(self, formdata, parts):
125 125
        self.formdata = formdata
126
        self.varname = varname
127

  
128
    def get_attachments(self):
129
        attachments = []
130
        for evo in self.formdata.evolution or []:
131
            for part in evo.parts or []:
132
                if not isinstance(part, AttachmentEvolutionPart):
133
                    continue
134
                if part.varname != self.varname:
135
                    continue
136
                attachments.append(part)
137
        attachments.reverse()
138
        return attachments
126
        self.parts = parts[:]
127
        self.parts.reverse()
139 128

  
140 129
    def __len__(self):
141
        return len(self.get_attachments())
130
        return len(self.parts)
142 131

  
143 132
    def __getattr__(self, name):
144 133
        return getattr(self[0], name)
145 134

  
146 135
    def __getitem__(self, i):
147
        attachment = self.get_attachments()[i]
148
        return AttachmentSubstitutionProxy(self.formdata, attachment)
136
        return AttachmentSubstitutionProxy(self.formdata, self.parts[i])
149 137

  
150 138

  
151 139
class AttachmentsSubstitutionProxy(object):
......
153 141
        self.formdata = formdata
154 142

  
155 143
    def __getattr__(self, name):
156
        for evo in self.formdata.evolution or []:
157
            for part in evo.parts or []:
158
                if getattr(part, 'varname', None) == name:
159
                    return NamedAttachmentsSubstitutionProxy(self.formdata, name)
144
        def has_varname_attachment(part):
145
            return isinstance(part, AttachmentEvolutionPart) and getattr(part, 'varname', None) == name
146

  
147
        parts = [part for part in self.formdata.iter_evolution_parts()
148
                 if has_varname_attachment(part)]
149
        if parts:
150
            return NamedAttachmentsSubstitutionProxy(self.formdata, parts)
160 151
        raise AttributeError(name)
161 152

  
162 153

  
......
1242 1233
                get_publisher().substitutions.feed(formdata)
1243 1234

  
1244 1235
                seen_triggers = []
1245
                for evolution in formdata.evolution:
1246
                    for part in evolution.parts or []:
1247
                        if isinstance(part, WorkflowGlobalActionTimeoutTriggerMarker):
1248
                            seen_triggers.append(part.timeout_id)
1236
                for part in formdata.iter_evolution_parts():
1237
                    if not isinstance(part, WorkflowGlobalActionTimeoutTriggerMarker):
1238
                        continue
1239
                    seen_triggers.append(part.timeout_id)
1249 1240

  
1250 1241
                for action, trigger in triggers:
1251 1242
                    if trigger.id in seen_triggers:
1252
-