+from argparse import ArgumentParser
+import os.path
+from Acquisition import aq_base
+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
+
+def checkContents(ob) :
+ global count
+ try :
+ print ob.absolute_url()
+ except Exception, e:
+ print >> errorLog, '%s/%s' % (ob.aq_parent.absolute_url(), ob.aq_base.id)
+ print >> errorLog, getattr(ob, 'portal_type', getattr(ob, 'meta_type', ''))
+ print >> errorLog, e
+ print >> errorLog
+
+ if isinstance(aq_base(ob), CMFCatalogAware) :
+ assert ob._getCatalogTool()
+ try :
+ ctool.indexObject(ob)
+ count = count + 1
+ if count % 1000 == 0 :
+ transaction.commit()
+ print count, 'commit.'
+ except Exception, e:
+ print >> errorLog, '%s/%s' % (ob.aq_parent.absolute_url(), ob.aq_base.id)
+ print >> errorLog, e
+
+ if hasattr(aq_base(ob), 'objectItems') :
+ obs = ob.objectItems()
+ for k, v in obs :
+ 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()
+