Réindexation des memberdata. Refactoring.
[Plinn.git] / _zctl / rebuild-catalog.py
index e9d0395..1436969 100644 (file)
@@ -5,15 +5,12 @@ from zope.site.hooks import setSite
 from Products.CMFCore.CMFCatalogAware import CMFCatalogAware
 import transaction
 
-# portal = app.realismc
-# setSite(portal)
-# ctool = portal.portal_catalog
-# 
-# errorLog = open('/home/zope/checkcontents-errors.log', 'w')
 count = 0
+errorLog = None
 
 def checkContents(ob) :
     global count
+    global errorLog
     try :
         print ob.absolute_url()
     except Exception, e:
@@ -23,7 +20,8 @@ def checkContents(ob) :
         print >> errorLog
     
     if isinstance(aq_base(ob), CMFCatalogAware) :
-        assert ob._getCatalogTool()
+        ctool = ob._getCatalogTool()
+        assert ctool
         try :
             ctool.indexObject(ob)
             count = count + 1
@@ -40,23 +38,37 @@ def checkContents(ob) :
             checkContents(v)
 
 
-parser = ArgumentParser(description="Deflate blobs backup set.")
-parser.add_argument('portal_path')
-parser.add_argument('--error-log', help='Error log file. Default: ~/catalog-rebuild-error.log',
-                    default='~/catalog-rebuild-error.log', required=False, dest='errorLogPath')
-
-args = parser.parse_args()
-portal = app.unrestrictedTraverse(args.portal_path)
-setSite(portal)
-ctool = portal.portal_catalog
-errorLogPath = os.path.expanduser(args.errorLogPath)
-errorLog = open(errorLogPath, 'w')
-
-try :
-    checkContents(portal)
-    transaction.commit()
-    print count
-    print 'Done.'
-finally :
-    errorLog.close()
+def indexMemberdata(portal) :
+    mtool = portal.portal_membership
+    ctool = portal.portal_catalog
+    for m in mtool.getOtherMembers([]) :
+        ctool.indexObject(m)
+
+def main(path) :
+    portal = app.unrestrictedTraverse(path)
+    setSite(portal)
+    errorLogPath = os.path.expanduser(args.errorLogPath)
+    global errorLog
+    errorLog = open(errorLogPath, 'w')
+
+    try :
+        checkContents(portal)
+        transaction.commit()
+        indexMemberdata(portal)
+        transaction.commit()
+        print count
+        print 'Done.'
+    finally :
+        errorLog.close()
+    
+
+
+if __name__ == '__main__':
+    parser = ArgumentParser(description="Rebuild entire catalog by walking contents tree.")
+    parser.add_argument('portal_path')
+    parser.add_argument('--error-log', help='Error log file. Default: ~/catalog-rebuild-error.log',
+                        default='~/catalog-rebuild-error.log', required=False, dest='errorLogPath')
+
+    args = parser.parse_args()
+    main(args.portal_path)