From 1f4985c9966c5c427cf7221dcfe47561c609293f Mon Sep 17 00:00:00 2001 From: helmutm Date: Tue, 30 Dec 2008 22:51:57 +0000 Subject: [PATCH] unindex track on removal git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@3100 fd906abe-77d9-0310-91a1-e0d9ade77398 --- tracking/btree.py | 24 +++++++++++++++++++----- tracking/interfaces.py | 4 ++++ 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/tracking/btree.py b/tracking/btree.py index bc58f82..a6b5e4c 100644 --- a/tracking/btree.py +++ b/tracking/btree.py @@ -26,12 +26,15 @@ import time from persistent import Persistent from BTrees import OOBTree, IOBTree from BTrees.IFBTree import intersection, union +from zope.component import adapter from zope.interface import implements from zope.app.container.btree import BTreeContainer +from zope.app.container.interfaces import IObjectRemovedEvent from zope.index.field import FieldIndex +from zope.traversing.api import getParent from zope.traversing.interfaces import IPhysicallyLocatable -from interfaces import IRun, ITrackingStorage, ITrack +from cybertools.tracking.interfaces import IRun, ITrackingStorage, ITrack class Run(object): @@ -53,7 +56,8 @@ class Run(object): class Track(Persistent): - implements(ITrack, IPhysicallyLocatable) + #implements(ITrack, IPhysicallyLocatable) + implements(ITrack) metadata_attributes = ('taskId', 'runId', 'userName', 'timeStamp') index_attributes = metadata_attributes @@ -72,8 +76,8 @@ class Track(Persistent): self.timeStamp = getTimeStamp() self.data = data - def getName(self): - return self.__name__ + #def getName(self): + # return self.__name__ def update(self, newData): if not newData: @@ -225,8 +229,13 @@ class TrackingStorage(BTreeContainer): self.taskUsers[taskId] = OOBTree.OOTreeSet() self.taskUsers[taskId].update([userName]) + def unindexTrack(self, trackNum, track): + for attr in self.indexAttributes: + self.indexes[attr].unindex_doc(trackNum) + def reindexTracks(self): - # TODO: clear indexes + for attr in self.trackFactory.index_attributes: + self.indexes[attr].clear() for trackId in self: trackNum = int(trackId) self.indexTrack(trackNum, self[trackId]) @@ -285,3 +294,8 @@ def timeStamp2ISO(ts): def getTimeStamp(): return int(time.time()) + + +@adapter(ITrack, IObjectRemovedEvent) +def unindexTrack(context, event): + getParent(context).unindexTrack(int(context.__name__), context) diff --git a/tracking/interfaces.py b/tracking/interfaces.py index 118ebaf..ab08571 100644 --- a/tracking/interfaces.py +++ b/tracking/interfaces.py @@ -46,6 +46,10 @@ class ITrack(Interface): metadata = Attribute('A mapping with the track\'s metadata') indexdata = Attribute('A mapping with the data to be used for indexing') + #def getName(): + # """ Return the internal name (ID) of the track. + # """ + class ITrackingStorage(Interface): """ A utility for storing user tracks.