[Zope-Checkins] SVN: Zope/trunk/ - Collector #1595: same as in Collector #1132 for indexes derived from

Andreas Jung andreas at andreas-jung.com
Sun Jan 30 08:30:06 EST 2005


Log message for revision 28979:
   - Collector #1595: same as in Collector #1132 for indexes derived from
     UnIndex. Exisiting ZCatalog instances must be converted manually
     by calling the "manage_convertIndexes" method through-the-web for 
     every single ZCatalog instance.
  
  - added manage_convertIndexes()
  
  - removed manage_convertIndex() (obsolete)
  
  

Changed:
  U   Zope/trunk/doc/CHANGES.txt
  U   Zope/trunk/lib/python/Products/ZCatalog/ZCatalog.py

-=-
Modified: Zope/trunk/doc/CHANGES.txt
===================================================================
--- Zope/trunk/doc/CHANGES.txt	2005-01-30 12:43:24 UTC (rev 28978)
+++ Zope/trunk/doc/CHANGES.txt	2005-01-30 13:30:06 UTC (rev 28979)
@@ -381,6 +381,11 @@
        from such an old version to Zope 2.8, you need to clear and reindex
        your ZCatalog).
 
+     - Collector #1595: same as in Collector #1132 for indexes derived from
+       UnIndex. Exisiting ZCatalog instances must be converted manually
+       by calling the "manage_convertIndexes" method through-the-web for 
+       every single ZCatalog instance.
+
      - Collector #1457: ZCTextIndex's QueryError and ParseError
        are now available for import from untrusted code.
 

Modified: Zope/trunk/lib/python/Products/ZCatalog/ZCatalog.py
===================================================================
--- Zope/trunk/lib/python/Products/ZCatalog/ZCatalog.py	2005-01-30 12:43:24 UTC (rev 28978)
+++ Zope/trunk/lib/python/Products/ZCatalog/ZCatalog.py	2005-01-30 13:30:06 UTC (rev 28979)
@@ -39,6 +39,7 @@
 from Products.PluginIndexes.TextIndex import Splitter
 from IZCatalog import IZCatalog
 from ProgressHandler import ZLogHandler
+from zLOG import LOG, INFO
 
 LOG = logging.getLogger('Zope.ZCatalog')
 
@@ -902,54 +903,41 @@
             self.pgthreshold = 0
         return self.pgthreshold
 
-    def manage_convertBTrees(self, threshold=200):
-        """Convert the catalog's data structures to use BTrees package"""
-        assert type(threshold) is type(0)
-        tt=time.time()
-        ct=time.clock()
-        self._catalog._convertBTrees(threshold)
-        tt=time.time()-tt
-        ct=time.clock()-ct
-        return 'Finished conversion in %s seconds (%s cpu)' % (tt, ct)
+    def manage_convertIndexes(self, REQUEST=None, RESPONSE=None, URL1=None):
+        """Recreate indexes derived from UnIndex because the implementation of
+           __len__ changed in Zope 2.8. Pre-Zope 2.7 installation used to implement
+           __len__ as persistent attribute of the index instance which is totally
+           incompatible with the new extension class implementation based on new-style
+           classes.
+        """
 
+        LOG.info('Start migration of indexes for %s' % self.absolute_url(1))
 
-    def manage_convertIndex(self, ids, REQUEST=None, RESPONSE=None, URL1=None):
-        """convert old-style indexes to new-style indexes"""
+        for idx in self.Indexes.objectValues():
+            bases = [str(name) for name in idx.__class__.__bases__]
+            found = False
+            for base in bases:
+                if 'UnIndex' in base:
+                    found = True
+                    break
 
-        from Products.PluginIndexes.KeywordIndex import KeywordIndex
-        from Products.PluginIndexes.FieldIndex import FieldIndex
-        from Products.PluginIndexes.TextIndex import TextIndex
+            if found:
+                idx_type = idx.meta_type
+                idx_id = idx.getId()
+                LOG.info('processing index %s' % idx_id)
+                indexed_attrs = getattr(idx, 'indexed_attrs', None)
+                self.delIndex(idx.getId())
+                self.addIndex(idx_id, idx_type)
+                new_idx = self.Indexes[idx_id]
+                if indexed_attrs:
+                    setattr(new_idx, 'indexed_attrs', indexed_attrs)
+                self.manage_reindexIndex(idx_id, REQUEST)
 
-        converted = []
-        for id in ids:
-            idx = self.Indexes[id]
+        RESPONSE.redirect(
+            URL1 +
+            '/manage_main?manage_tabs_message=Indexes%20converted%20and%20reindexed')
 
-            iface = getattr(idx,'__implements__',None)
-            if iface is None:
 
-                mt = idx.meta_type
-
-                converted.append(id)
-                self.delIndex(id)
-
-                if mt in ('Field Index','Keyword Index'):
-                    self.addIndex(id,mt.replace(' ',''))
-                elif mt == 'Text Index':
-                    # TODO: Lexicon handling to be added
-                    self.addIndex(id,'TextIndex')
-
-        if converted:
-            RESPONSE.redirect(
-                URL1 +
-                '/manage_main?manage_tabs_message=Indexes%20converted')
-        else:
-            RESPONSE.redirect(
-                URL1 +
-                '/manage_main?'
-                'manage_tabs_message='
-                'No%20indexes%20found%20to%20be%20converted')
-
-
     #
     # Indexing methods
     #



More information about the Zope-Checkins mailing list