saveUserTrack: parameter 'update' instead of 'replace'

git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@1710 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2007-05-04 12:29:23 +00:00
parent 34f20329d7
commit 618ea75bb5
3 changed files with 16 additions and 14 deletions

View file

@ -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 an existing one (if present). The replaced entry is always the last one
for a given set of keys. 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' '0000003'
>>> t3 = tracks.getUserTracks('a001', 0, 'u1') >>> t3 = tracks.getUserTracks('a001', 0, 'u1')
>>> [t.data for t in t3] >>> [t.data for t in t3]
[{'somekey': 'somevalue'}, {'somekey': 'newvalue2'}] [{'somekey': 'somevalue'}, {'somekey': 'newvalue2'}]
>>> tracks.saveUserTrack('a001', 0, 'u2', {'somekey': 'user2'}, replace=True) >>> tracks.saveUserTrack('a001', 0, 'u2', {'somekey': 'user2'}, update=True)
'0000004' '0000004'
>>> t4 = tracks.getUserTracks('a001', 0, 'u2') >>> t4 = tracks.getUserTracks('a001', 0, 'u2')
>>> [t.data for t in t4] >>> [t.data for t in t4]
@ -124,7 +124,3 @@ We can also mark earlier runs by stopping them.
>>> tracks.getRun(runId=2) >>> tracks.getRun(runId=2)
<Run 2, ..., ..., True> <Run 2, ..., ..., True>
Fin de partie
=============

View file

@ -100,7 +100,7 @@ class TrackingStorage(BTreeContainer):
return self.runs.get(runId) return self.runs.get(runId)
return None return None
def saveUserTrack(self, taskId, runId, userName, data, replace=False): def saveUserTrack(self, taskId, runId, userName, data, update=False):
if not runId: if not runId:
runId = self.currentRuns.get(taskId) or self.startRun(taskId) runId = self.currentRuns.get(taskId) or self.startRun(taskId)
run = self.getRun(runId=runId) run = self.getRun(runId=runId)
@ -108,17 +108,19 @@ class TrackingStorage(BTreeContainer):
raise ValueError('Invalid run: %i.' % runId) raise ValueError('Invalid run: %i.' % runId)
run.end = getTimeStamp() run.end = getTimeStamp()
trackNum = 0 trackNum = 0
if replace: if update:
track = self.getLastUserTrack(taskId, runId, userName) track = self.getLastUserTrack(taskId, runId, userName)
if track: if track:
trackId = str(track.__name__) trackId = str(track.__name__)
trackNum = int(trackId) trackNum = int(trackId)
del self[trackId] track.data.update(data)
self.indexTrack(trackNum, track)
return trackId
if not trackNum: if not trackNum:
self.trackNum += 1 self.trackNum += 1
trackNum = self.trackNum trackNum = self.trackNum
trackId = self.idFromNum(trackNum) trackId = self.idFromNum(trackNum)
track = Track(taskId, runId, userName, getTimeStamp(), data) track = Track(taskId, runId, userName, data)
self[trackId] = track self[trackId] = track
self.indexTrack(trackNum, track) self.indexTrack(trackNum, track)
return trackId return trackId
@ -183,11 +185,15 @@ class Track(Persistent):
def metadata(self): def metadata(self):
return dict((attr, getattr(self, attr)) for attr in self.metadata_attributes) 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.taskId = taskId
self.runId = runId self.runId = runId
self.userName = userName self.userName = userName
self.timeStamp = timeStamp self.timeStamp = getTimeStamp()
self.data = data
def update(self, data):
self.timeStamp = getTimeStamp()
self.data = data self.data = data
def __repr__(self): def __repr__(self):

View file

@ -72,11 +72,11 @@ class ITrackingStorage(Interface):
current run of the task. 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 """ Save the data given (typically a mapping object) to the user track
corresponding to the user name, task id, and run id given. corresponding to the user name, task id, and run id given.
If the runId is 0 use the task's current run. 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. one for the given set of keys.
Return the new track item's id. Return the new track item's id.
""" """