Projet

Général

Profil

0001-formdata-keep-link-from-evolution-objects-to-related.patch

Frédéric Péters, 13 juillet 2017 11:31

Télécharger (3,53 ko)

Voir les différences:

Subject: [PATCH 1/2] formdata: keep link from evolution objects to related
 formdata (#17601)

 wcs/formdata.py | 19 +++++++++++++++++--
 wcs/sql.py      |  8 ++++----
 2 files changed, 21 insertions(+), 6 deletions(-)
wcs/formdata.py
135 135
    comment = None
136 136
    parts = None
137 137

  
138
    def __init__(self, formdata=None):
139
        self._formdata = formdata # formdata cache
140

  
141
    @property
142
    def formdata(self):
143
        return self._formdata
144

  
138 145
    def get_author_name(self):
139 146
        if self.who == '_submitter':
140 147
            return _('Original Submitter')
......
182 189
            data['parts'] = parts
183 190
        return data
184 191

  
192
    # don't pickle _formata cache
193
    def __getstate__(self):
194
        odict = self.__dict__.copy()
195
        if odict.has_key('_formdata'):
196
            del odict['_formdata']
197
        return odict
198

  
185 199

  
186 200
class FormData(StorableObject):
187 201
    _names = 'XX'
......
231 245
            changed = True
232 246
        if self.evolution:
233 247
            for evo in self.evolution:
248
                evo._formdata = self # link from evolution to formdata
234 249
                if evo.status and not evo.status.startswith('wf-'):
235 250
                    evo.status = 'wf-%s' % evo.status
236 251
                    changed = True
......
314 329
        # we add the initial status to the history, this makes it more readable
315 330
        # afterwards (also this gets the (previous_status) code to work in all
316 331
        # cases)
317
        evo = Evolution()
332
        evo = Evolution(self)
318 333
        evo.who = '_submitter'
319 334
        evo.time = self.receipt_time
320 335
        evo.status = self.status
......
469 484
            previous_status = self.pop_previous_marked_status()
470 485
            assert previous_status, 'failed to compute previous status'
471 486
            status_id = previous_status.id
472
        evo = Evolution()
487
        evo = Evolution(self)
473 488
        evo.time = time.localtime()
474 489
        evo.status = 'wf-%s' % status_id
475 490
        if not self.evolution:
wcs/sql.py
1130 1130
            row = cur.fetchone()
1131 1131
            if row is None:
1132 1132
                break
1133
            self._evolution.append(self._row2evo(row))
1133
            self._evolution.append(self._row2evo(row, formdata=self))
1134 1134
        conn.commit()
1135 1135
        cur.close()
1136 1136
        return self._evolution
1137 1137

  
1138 1138
    @classmethod
1139
    def _row2evo(cls, row):
1140
        o = wcs.formdata.Evolution()
1139
    def _row2evo(cls, row, formdata):
1140
        o = wcs.formdata.Evolution(formdata)
1141 1141
        o._sql_id, o.who, o.status, o.time, o.comment = [str_encode(x) for x in tuple(row[:5])]
1142 1142
        if o.time:
1143 1143
            o.time = o.time.timetuple()
......
1179 1179
            formdata = object_dict.get(formdata_id)
1180 1180
            if not formdata:
1181 1181
                continue
1182
            formdata._evolution.append(formdata._row2evo(row))
1182
            formdata._evolution.append(formdata._row2evo(row, formdata))
1183 1183

  
1184 1184
        conn.commit()
1185 1185
        cur.close()
1186
-