Projet

Général

Profil

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

Benjamin Dauvergne, 23 janvier 2020 11:48

Télécharger (5,7 ko)

Voir les différences:

Subject: [PATCH 3/7] 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
1096 1096
            field.feed_session(self.data.get(field.id),
1097 1097
                    self.data.get('%s_display' % field.id))
1098 1098

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

  
1099 1104
    def __getattr__(self, attr):
1100 1105
        try:
1101 1106
            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
35 35
    else:
36 36
        file_reference = None
37 37

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

  
48 46

  
49 47
def form_attachment(self):
wcs/workflows.py
124 124

  
125 125

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

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

  
143 132
    def __len__(self):
144
        return len(self.get_attachments())
133
        return len(self.parts)
145 134

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

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

  
153 141

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

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

  
167 158

  
......
1246 1237
                get_publisher().substitutions.feed(formdata)
1247 1238

  
1248 1239
                seen_triggers = []
1249
                for evolution in formdata.evolution:
1250
                    for part in evolution.parts or []:
1251
                        if isinstance(part, WorkflowGlobalActionTimeoutTriggerMarker):
1252
                            seen_triggers.append(part.timeout_id)
1240
                for part in formdata.iter_evolution_parts():
1241
                    if not isinstance(part, WorkflowGlobalActionTimeoutTriggerMarker):
1242
                        continue
1243
                    seen_triggers.append(part.timeout_id)
1253 1244

  
1254 1245
                for action, trigger in triggers:
1255 1246
                    if trigger.id in seen_triggers:
1256
-