[Zope-Checkins] CVS: Zope/lib/python/Products/PluginIndexes/TopicIndex - TopicIndex.py:1.13.2.1

Andreas Jung andreas at andreas-jung.com
Thu Sep 18 10:16:46 EDT 2003


Update of /cvs-repository/Zope/lib/python/Products/PluginIndexes/TopicIndex
In directory cvs.zope.org:/tmp/cvs-serv6537/lib/python/Products/PluginIndexes/TopicIndex

Modified Files:
      Tag: Zope-2_7-branch
	TopicIndex.py 
Log Message:
Merge from HEAD:

     - PathIndex and TopicIndex are now using a counter for the number
       of indexed objects instead of using a very expensive calculation
       based on the keys of their indexes. 


=== Zope/lib/python/Products/PluginIndexes/TopicIndex/TopicIndex.py 1.13 => 1.13.2.1 ===
--- Zope/lib/python/Products/PluginIndexes/TopicIndex/TopicIndex.py:1.13	Mon Jun 23 04:45:58 2003
+++ Zope/lib/python/Products/PluginIndexes/TopicIndex/TopicIndex.py	Thu Sep 18 10:16:15 2003
@@ -13,30 +13,30 @@
 
 __version__ = '$Id$'
 
-from Products.PluginIndexes import PluggableIndex
-from Products.PluginIndexes.common.util import parseIndexRequest
-
 from Globals import Persistent, DTMLFile
 from OFS.SimpleItem import SimpleItem
-from Acquisition import Implicit
+from zLOG import ERROR, LOG
 from BTrees.OOBTree import OOBTree
 from BTrees.IIBTree import IISet,intersection,union
-from zLOG import ERROR, LOG
+
 import FilteredSet
+from Products.PluginIndexes import PluggableIndex
+from Products.PluginIndexes.common.util import parseIndexRequest
 
 _marker = []
 
-class TopicIndex(Persistent, Implicit, SimpleItem):
+class TopicIndex(Persistent, SimpleItem):
 
     """ A TopicIndex maintains a set of FilteredSet objects.
-    Every FilteredSet object consists of an expression and
-    and IISet with all Ids of indexed objects that eval with
-    this expression to 1.
+        Every FilteredSet object consists of an expression and
+        and IISet with all Ids of indexed objects that eval with
+        this expression to 1.
     """
 
     __implements__ = (PluggableIndex.PluggableIndexInterface,)
 
     meta_type="TopicIndex"
+    query_options = ('query','operator')
 
     manage_options= (
         {'label': 'FilteredSets',
@@ -44,93 +44,59 @@
          'help': ('TopicIndex','TopicIndex_searchResults.stx')},
     )
 
-    manage_workspace = DTMLFile('dtml/manageTopicIndex',globals())
-
-    query_options = ('query','operator')
-
     def __init__(self,id,caller=None):
-        self.id             = id
-        self.filteredSets   = OOBTree()
-        # experimental code for specifing the operator
-        self.operators       = ('or','and')
+        self.id = id
+        self.filteredSets  = OOBTree()
+        self.operators = ('or','and')
         self.defaultOperator = 'or'
 
-
     def getId(self): return self.id
 
     def clear(self):
-        """ clear everything """
-
         for fs in self.filteredSets.values():
             fs.clear()
 
-
-    def index_object(self, documentId, obj ,threshold=100):
+    def index_object(self, docid, obj ,threshold=100):
         """ hook for (Z)Catalog """
-
         for fid, filteredSet in self.filteredSets.items():
-            filteredSet.index_object(documentId,obj)
-
+            filteredSet.index_object(docid,obj)
         return 1
 
-
-    def unindex_object(self,documentId):
+    def unindex_object(self,docid):
         """ hook for (Z)Catalog """
 
         for fs in self.filteredSets.values():
-
             try:
-                fs.unindex_object(documentId)
+                fs.unindex_object(docid)
             except KeyError:
                 LOG(self.__class__.__name__, ERROR,
                     'Attempt to unindex document'
-                    ' with id %s failed' % documentId)
+                    ' with id %s failed' % docid)
         return 1
 
-
-    def __len__(self):
-        """ len """
-        n=0
-        for fs in self.filteredSets.values():
-            n = n + len(fs.getIds())
-        return n
-
-
     def numObjects(self):
-        return "N/A"
-
-
-    def keys(self):   pass
-    def values(self): pass
-    def items(self):  pass
-
-
-    def search(self,filterId):
-
-        if self.filteredSets.has_key(filterId):
-            return self.filteredSets[filterId].getIds()
+        return "n/a"
 
+    def search(self,filter_id):
+        if self.filteredSets.has_key(filter_id):
+            return self.filteredSets[filter_id].getIds()
 
     def _apply_index(self, request, cid=''):
         """ hook for (Z)Catalog
-        request   mapping type (usually {"topic": "..." }
-        cid      ???
+            'request' --  mapping type (usually {"topic": "..." }
+            'cid' -- ???
         """
 
         record = parseIndexRequest(request,self.id,self.query_options)
-        if record.keys==None: return None
+        if record.keys is None: return None
 
-        # experimental code for specifing the operator
-        operator = record.get('operator',self.defaultOperator).lower()
-
-        # depending on the operator we use intersection of union
-        if operator=="or":  set_func = union
-        else:               set_func = intersection
+        operator = record.get('operator', self.defaultOperator).lower()
+        if operator == 'or':  set_func = union
+        else: set_func = intersection
 
         res = None
-
-        for filterId in record.keys:
-            rows = self.search(filterId)
+        for filter_id in record.keys:
+            rows = self.search(filter_id)
             res = set_func(res,rows)
 
         if res:
@@ -138,79 +104,65 @@
         else:
             return IISet(), (self.id,)
 
-
-    def uniqueValues(self,name=None,withLength=0):
+    def uniqueValues(self,name=None, withLength=0):
         """ needed to be consistent with the interface """
-
         return self.filteredSets.keys()
 
-
-    def getEntryForObject(self,documentId,default=_marker):
+    def getEntryForObject(self,docid, default=_marker):
         """ Takes a document ID and returns all the information we have
-        on that specific object. """
-
+            on that specific object. 
+        """
         return self.filteredSets.keys()
 
+    def addFilteredSet(self, filter_id, typeFilteredSet, expr):
 
-    def addFilteredSet(self, filterId, typeFilteredSet, expr):
-
-        if self.filteredSets.has_key(filterId):
+        if self.filteredSets.has_key(filter_id):
             raise KeyError,\
-                'A FilteredSet with this name already exists: %s' % filterId
-
-        self.filteredSets[filterId] = \
-            FilteredSet.factory(filterId, typeFilteredSet, expr)
+                'A FilteredSet with this name already exists: %s' % filter_id
+        self.filteredSets[filter_id] = \
+            FilteredSet.factory(filter_id, typeFilteredSet, expr)
 
-
-    def delFilteredSet(self,filterId):
-
-        if not self.filteredSets.has_key(filterId):
+    def delFilteredSet(self,filter_id):
+        if not self.filteredSets.has_key(filter_id):
             raise KeyError,\
-                'no such FilteredSet:  %s' % filterId
-
-        del self.filteredSets[filterId]
+                'no such FilteredSet:  %s' % filter_id
+        del self.filteredSets[filter_id]
 
-
-    def clearFilteredSet(self,filterId):
-
-        if not self.filteredSets.has_key(filterId):
+    def clearFilteredSet(self,filter_id):
+        if not self.filteredSets.has_key(filter_id):
             raise KeyError,\
-                'no such FilteredSet:  %s' % filterId
-
-        self.filteredSets[filterId].clear()
+                'no such FilteredSet:  %s' % filter_id
+        self.filteredSets[filter_id].clear()
 
-
-    def manage_addFilteredSet(self, filterId, typeFilteredSet, expr, URL1, \
+    def manage_addFilteredSet(self, filter_id, typeFilteredSet, expr, URL1, \
             REQUEST=None,RESPONSE=None):
         """ add a new filtered set """
 
-        if len(filterId)==0: raise RuntimeError,'Length of ID too short'
-        if len(expr)==0: raise RuntimeError,'Length of expression too short'
+        if len(filter_id) == 0: raise RuntimeError,'Length of ID too short'
+        if len(expr) == 0: raise RuntimeError,'Length of expression too short'
 
-        self.addFilteredSet(filterId, typeFilteredSet, expr)
+        self.addFilteredSet(filter_id, typeFilteredSet, expr)
 
         if RESPONSE:
             RESPONSE.redirect(URL1+'/manage_workspace?'
             'manage_tabs_message=FilteredSet%20added')
 
-
-    def manage_delFilteredSet(self, filterIds=[], URL1=None, \
+    def manage_delFilteredSet(self, filter_ids=[], URL1=None, \
             REQUEST=None,RESPONSE=None):
         """ delete a list of FilteredSets"""
 
-        for filterId in filterIds:
-            self.delFilteredSet(filterId)
+        for filter_id in filter_ids:
+            self.delFilteredSet(filter_id)
 
         if RESPONSE:
             RESPONSE.redirect(URL1+'/manage_workspace?'
             'manage_tabs_message=FilteredSet(s)%20deleted')
 
-
-    def manage_saveFilteredSet(self,filterId, expr, URL1=None,\
+    def manage_saveFilteredSet(self,filter_id, expr, URL1=None,\
             REQUEST=None,RESPONSE=None):
         """ save expression for a FilteredSet """
 
-        self.filteredSets[filterId].setExpression(expr)
+        self.filteredSets[filter_id].setExpression(expr)
 
         if RESPONSE:
             RESPONSE.redirect(URL1+'/manage_workspace?'
@@ -219,22 +171,22 @@
     def getIndexSourceNames(self):
         """ return names of indexed attributes """
         return ('n/a',)
-    
 
-    def manage_clearFilteredSet(self, filterIds=[], URL1=None, \
+    def manage_clearFilteredSet(self, filter_ids=[], URL1=None, \
             REQUEST=None,RESPONSE=None):
         """  clear a list of FilteredSets"""
 
-        for filterId in filterIds:
-            self.clearFilteredSet(filterId)
+        for filter_id in filter_ids:
+            self.clearFilteredSet(filter_id)
 
         if RESPONSE:
             RESPONSE.redirect(URL1+'/manage_workspace?'
              'manage_tabs_message=FilteredSet(s)%20cleared')
 
 
-    editFilteredSet = DTMLFile('dtml/editFilteredSet',globals())
     index_html      = DTMLFile('dtml/index', globals())
+    manage_workspace = DTMLFile('dtml/manageTopicIndex',globals())
+    editFilteredSet = DTMLFile('dtml/editFilteredSet',globals())
 
 
 manage_addTopicIndexForm = DTMLFile('dtml/addTopicIndex', globals())




More information about the Zope-Checkins mailing list