Projet

Général

Profil

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

Benjamin Dauvergne, 28 novembre 2019 01:55

Télécharger (5,7 ko)

Voir les différences:

Subject: [PATCH 2/5] 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
1609 1609
                        (formdata.workflow_data or {}).values()):
1610 1610
                    if is_upload(field_data):
1611 1611
                        yield field_data.get_filename()
1612
                for evolution in (formdata.evolution or []):
1613
                    for part in (evolution.parts or []):
1614
                        if is_attachment(part):
1615
                            yield part.filename
1612
                for part in formdata.iter_evolution_parts():
1613
                    if is_attachment(part):
1614
                        yield part.filename
1616 1615
        for user in publisher.user_class.select():
1617 1616
            for field_data in (user.form_data or {}).values():
1618 1617
                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
123 123

  
124 124

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

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

  
142 131
    def __len__(self):
143
        return len(self.get_attachments())
132
        return len(self.parts)
144 133

  
145 134
    def __getattr__(self, name):
146 135
        return getattr(self[0], name)
147 136

  
148 137
    def __getitem__(self, i):
149
        attachment = self.get_attachments()[i]
150
        return AttachmentSubstitutionProxy(self.formdata, attachment)
138
        return AttachmentSubstitutionProxy(self.formdata, self.parts[i])
151 139

  
152 140

  
153 141
class AttachmentsSubstitutionProxy(object):
......
157 145
    def __getattr__(self, name):
158 146
        if name.startswith('__'):
159 147
            raise AttributeError(name)
160
        for evo in self.formdata.evolution or []:
161
            for part in evo.parts or []:
162
                if getattr(part, 'varname', None) == name:
163
                    return NamedAttachmentsSubstitutionProxy(self.formdata, name)
148
        def has_varname_attachment(part):
149
            return isinstance(part, AttachmentEvolutionPart) and getattr(part, 'varname', None) == name
150

  
151
        parts = [part for part in self.formdata.iter_evolution_parts()
152
                 if has_varname_attachment(part)]
153
        if parts:
154
            return NamedAttachmentsSubstitutionProxy(self.formdata, parts)
164 155
        raise AttributeError(name)
165 156

  
166 157

  
......
1243 1234
                get_publisher().substitutions.feed(formdata)
1244 1235

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

  
1251 1242
                for action, trigger in triggers:
1252 1243
                    if trigger.id in seen_triggers:
1253
-