def rebuild_catalog(self): context = self.context upgrades.upgrade_plone(context) catalog = getToolByName(self.context, 'portal_catalog') upgrades.log('Recataloging items') brains = catalog.search({}) lb = len(brains) for i, itm in enumerate(brains): try: obj = context.unrestrictedTraverse(itm.getPath()) uid = '/'.join(obj.getPhysicalPath()) if not uid in catalog._catalog.uids: catalog.catalog_object(obj) catalog.indexObject(obj) # let the objects be wrapped now by plone.indexer if IIndexableObject.providedBy(obj): interface.noLongerProvides(obj, IIndexableObject) catalog.reindexObject(obj, [ "allowedRolesAndUsers", "object_provides", "sortable_title", "getObjPositionInParent", "getObjSize", "is_folderish", "syndication_enabled", "is_default_page", "getIcon"] ) except Exception, e: upgrades.log('pb cataloging %s; %s' % (itm.getPath(), e)) if i % 10 == 0: upgrades.log('Recatalog: %s on %s (%s %s)' % ( i, lb, (i / (1.0 * lb) * 100), '%')) upgrades.commit(context)
def upgrade_plone(self): """Run the plone_migration tool upgrade loop""" pm = getToolByName(self.context, 'portal_migration') if pm.needUpgrading(): upgrades.log( upgrades.upgrade_plone(self.context) ) upgrades.commit(self.context) if pm.needUpgrading(): raise Exception("Plone did not upgrade") else: upgrades.commit(self.context)