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
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)
<Run 2, ..., ..., True>
Fin de partie
=============

View file

@ -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):

View file

@ -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.
"""