diff --git a/tracking/README.txt b/tracking/README.txt index c5e23fa..9138188 100644 --- a/tracking/README.txt +++ b/tracking/README.txt @@ -56,13 +56,13 @@ Instead of creating a new track object for each call one can also replace an existing one (if present). The replaced entry is always the last one for a given set of keys. - >>> tracks.saveUserTrack('a001', 0, 'u1', {'somekey': 'newvalue2'}, replace=True) + >>> tracks.saveUserTrack('a001', 0, 'u1', {'somekey': 'newvalue2'}, update=True) '0000003' >>> t3 = tracks.getUserTracks('a001', 0, 'u1') >>> [t.data for t in t3] [{'somekey': 'somevalue'}, {'somekey': 'newvalue2'}] - >>> tracks.saveUserTrack('a001', 0, 'u2', {'somekey': 'user2'}, replace=True) + >>> tracks.saveUserTrack('a001', 0, 'u2', {'somekey': 'user2'}, update=True) '0000004' >>> t4 = tracks.getUserTracks('a001', 0, 'u2') >>> [t.data for t in t4] @@ -124,7 +124,3 @@ We can also mark earlier runs by stopping them. >>> tracks.getRun(runId=2) - -Fin de partie -============= - diff --git a/tracking/btree.py b/tracking/btree.py index fbd505b..d2560c6 100644 --- a/tracking/btree.py +++ b/tracking/btree.py @@ -100,7 +100,7 @@ class TrackingStorage(BTreeContainer): return self.runs.get(runId) return None - def saveUserTrack(self, taskId, runId, userName, data, replace=False): + def saveUserTrack(self, taskId, runId, userName, data, update=False): if not runId: runId = self.currentRuns.get(taskId) or self.startRun(taskId) run = self.getRun(runId=runId) @@ -108,17 +108,19 @@ class TrackingStorage(BTreeContainer): raise ValueError('Invalid run: %i.' % runId) run.end = getTimeStamp() trackNum = 0 - if replace: + if update: track = self.getLastUserTrack(taskId, runId, userName) if track: trackId = str(track.__name__) trackNum = int(trackId) - del self[trackId] + track.data.update(data) + self.indexTrack(trackNum, track) + return trackId if not trackNum: self.trackNum += 1 trackNum = self.trackNum trackId = self.idFromNum(trackNum) - track = Track(taskId, runId, userName, getTimeStamp(), data) + track = Track(taskId, runId, userName, data) self[trackId] = track self.indexTrack(trackNum, track) return trackId @@ -183,11 +185,15 @@ class Track(Persistent): def metadata(self): return dict((attr, getattr(self, attr)) for attr in self.metadata_attributes) - def __init__(self, taskId, runId, userName, timeStamp, data={}): + def __init__(self, taskId, runId, userName, data={}): self.taskId = taskId self.runId = runId self.userName = userName - self.timeStamp = timeStamp + self.timeStamp = getTimeStamp() + self.data = data + + def update(self, data): + self.timeStamp = getTimeStamp() self.data = data def __repr__(self): diff --git a/tracking/interfaces.py b/tracking/interfaces.py index 8d0fd4a..35ec29e 100644 --- a/tracking/interfaces.py +++ b/tracking/interfaces.py @@ -72,11 +72,11 @@ class ITrackingStorage(Interface): current run of the task. """ - def saveUserTrack(taskId, runId, userName, data, replace=False): + def saveUserTrack(taskId, runId, userName, data, update=False): """ Save the data given (typically a mapping object) to the user track corresponding to the user name, task id, and run id given. If the runId is 0 use the task's current run. - If the ``replace`` flag is set, the new track replaces the last + If the ``update`` flag is set, the new track updates the last one for the given set of keys. Return the new track item's id. """