From ff23ddf90ab47ba473a76c5bc4e900e9fa4828be Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Mon, 3 Nov 2014 10:32:51 +0100 Subject: [PATCH] always track state changes; allow control of change tracking via 'force' parameter --- organize/tracking/change.py | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/organize/tracking/change.py b/organize/tracking/change.py index 27d5c1a..26e92a0 100644 --- a/organize/tracking/change.py +++ b/organize/tracking/change.py @@ -52,11 +52,16 @@ class ChangeManager(BaseRecordManager): @Lazy def valid(self): + return self.isValid() + + def isValid(self, data={}, **kw): req = util.getRequest() if req and req.form.get('organize.suppress_tracking'): return False if self.context is None or self.storage is None or self.personId is None: return False + if kw.get('force') or data.get('transition'): + return True opt = self.options('organize.tracking.changes') if isinstance(opt, (list, tuple)): if hasattr(self.context, 'getType'): @@ -67,23 +72,23 @@ class ChangeManager(BaseRecordManager): return bool(opt) def recordModification(self, action='modify', **kw): - if not self.valid: - return - uid = util.getUidForObject(self.context) - last = self.storage.getLastUserTrack(uid, 0, self.personId) - update = (last is not None and last.data.get('action') == action and - last.metadata['timeStamp'] >= getTimeStamp() - 5) data = dict(action=action) - relation = kw.get('relation') - if relation is not None: - data['predicate'] = util.getUidForObject(relation.predicate) - data['second'] = util.getUidForObject(relation.second) event = kw.get('event') if event is not None: desc = getattr(event, 'descriptions', ()) for item in desc: if isinstance(item, dict): data.update(item) + if not self.isValid(data, **kw): + return + uid = util.getUidForObject(self.context) + last = self.storage.getLastUserTrack(uid, 0, self.personId) + update = (last is not None and last.data.get('action') == action and + last.metadata['timeStamp'] >= getTimeStamp() - 5) + relation = kw.get('relation') + if relation is not None: + data['predicate'] = util.getUidForObject(relation.predicate) + data['second'] = util.getUidForObject(relation.second) if update: self.storage.updateTrack(last, data) else: