From 6497d1516857b05829e97bcce6a80948e8b95a58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Thu, 13 Jul 2017 10:40:01 +0200 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(-) diff --git a/wcs/formdata.py b/wcs/formdata.py index 933c4697..b6b0fab0 100644 --- a/wcs/formdata.py +++ b/wcs/formdata.py @@ -135,6 +135,13 @@ class Evolution(object): comment = None parts = None + def __init__(self, formdata=None): + self._formdata = formdata # formdata cache + + @property + def formdata(self): + return self._formdata + def get_author_name(self): if self.who == '_submitter': return _('Original Submitter') @@ -182,6 +189,13 @@ class Evolution(object): data['parts'] = parts return data + # don't pickle _formata cache + def __getstate__(self): + odict = self.__dict__.copy() + if odict.has_key('_formdata'): + del odict['_formdata'] + return odict + class FormData(StorableObject): _names = 'XX' @@ -231,6 +245,7 @@ class FormData(StorableObject): changed = True if self.evolution: for evo in self.evolution: + evo._formdata = self # link from evolution to formdata if evo.status and not evo.status.startswith('wf-'): evo.status = 'wf-%s' % evo.status changed = True @@ -314,7 +329,7 @@ class FormData(StorableObject): # we add the initial status to the history, this makes it more readable # afterwards (also this gets the (previous_status) code to work in all # cases) - evo = Evolution() + evo = Evolution(self) evo.who = '_submitter' evo.time = self.receipt_time evo.status = self.status @@ -469,7 +484,7 @@ class FormData(StorableObject): previous_status = self.pop_previous_marked_status() assert previous_status, 'failed to compute previous status' status_id = previous_status.id - evo = Evolution() + evo = Evolution(self) evo.time = time.localtime() evo.status = 'wf-%s' % status_id if not self.evolution: diff --git a/wcs/sql.py b/wcs/sql.py index b705e91c..3639b912 100644 --- a/wcs/sql.py +++ b/wcs/sql.py @@ -1130,14 +1130,14 @@ class SqlFormData(SqlMixin, wcs.formdata.FormData): row = cur.fetchone() if row is None: break - self._evolution.append(self._row2evo(row)) + self._evolution.append(self._row2evo(row, formdata=self)) conn.commit() cur.close() return self._evolution @classmethod - def _row2evo(cls, row): - o = wcs.formdata.Evolution() + def _row2evo(cls, row, formdata): + o = wcs.formdata.Evolution(formdata) o._sql_id, o.who, o.status, o.time, o.comment = [str_encode(x) for x in tuple(row[:5])] if o.time: o.time = o.time.timetuple() @@ -1179,7 +1179,7 @@ class SqlFormData(SqlMixin, wcs.formdata.FormData): formdata = object_dict.get(formdata_id) if not formdata: continue - formdata._evolution.append(formdata._row2evo(row)) + formdata._evolution.append(formdata._row2evo(row, formdata)) conn.commit() cur.close() -- 2.13.2