def reindexIndexes(self, idxs=[], update_metadata=False, meta_types=[], portal_types=[]): """Reindex index including metadata if p_update_metadata=True. Filter meta_type/portal_type when p_meta_types and p_portal_types are given.""" catalog = api.portal.get_tool('portal_catalog') paths = catalog._catalog.uids.keys() pghandler = ZLogHandler(steps=1000) i = 0 pghandler.info( 'In reindexIndexes, idxs={0}, update_metadata={1}, meta_types={2}, portal_types={3}'.format( repr(idxs), repr(update_metadata), repr(meta_types), repr(portal_types))) pghandler.init('reindexIndexes', len(paths)) for p in paths: i += 1 if pghandler: pghandler.report(i) obj = catalog.resolve_path(p) if obj is None: logger.error( 'reindexIndex could not resolve an object from the uid %r.' % p) else: if (meta_types and obj.meta_type not in meta_types) or \ (portal_types and obj.portal_type not in portal_types): continue catalog.catalog_object( obj, p, idxs=idxs, update_metadata=update_metadata, pghandler=pghandler) if pghandler: pghandler.finish()
def _migrateMeetingCategoryToDX(self): '''Migrate from AT MeetingCategory to DX meetingcategory.''' logger.info('Migrating MeetingCategory from AT to DX...') # update item classifier # migrate references pghandler = ZLogHandler(steps=100) brains = self.portal.reference_catalog( relationship='ItemClassification') pghandler.init('Updating field MeetingItem.classifier...', len(brains)) pghandler.info('Updating field MeetingItem.classifier...') i = 0 for brain in brains: i += 1 pghandler.report(i) relation = brain.getObject() item = relation.getSourceObject() classifier = relation.getTargetObject() item.setClassifier(classifier.getId()) item.reindexObject(idxs=['getRawClassifier']) # deleteReferences in a second phase for brain in brains: relation = brain.getObject() item = relation.getSourceObject() item.deleteReferences('ItemClassification') pghandler.finish() logger.info('Migrating categories and classifiers in configuration...') # make sure new portal_type meetingcategory is installed self.ps.runImportStepFromProfile( 'profile-Products.PloneMeeting:default', 'typeinfo') # make sure no workflow used for meetingcategory self.wfTool.setChainForPortalTypes(('meetingcategory', ), ('', )) # adapt allowed_types for each MeetingConfig.categories/classifiers folders for cfg in self.tool.objectValues('MeetingConfig'): for folder_id in ('categories', 'classifiers'): constrain = IConstrainTypes(getattr(cfg, folder_id)) constrain.setConstrainTypesMode(1) allowedTypes = ['meetingcategory'] constrain.setLocallyAllowedTypes(allowedTypes) constrain.setImmediatelyAddableTypes(allowedTypes) # migrate to DX pac_migrate(self.portal, MeetingCategoryMigrator) self.removeUnusedPortalTypes(portal_types=['MeetingCategory']) # add meetingcategory to types_not_searched props = api.portal.get_tool('portal_properties').site_properties nsTypes = props.getProperty('types_not_searched') if 'meetingcategory' not in nsTypes: nsTypes = list(nsTypes) # MeetingCategory was removed by removeUnusedPortalTypes nsTypes.append('meetingcategory') props.manage_changeProperties(types_not_searched=tuple(nsTypes)) logger.info('Done.')
def _umarkCreationFlagForEveryItems(self): """ """ brains = self.catalog(meta_type='MeetingItem') pghandler = ZLogHandler(steps=100) pghandler.init('Cleaning ftw.labels wrong annotations...', len(brains)) pghandler.info("Unmarking _at_creation_flag for every items...") i = 0 for brain in brains: i += 1 pghandler.report(i) item = brain.getObject() item.unmarkCreationFlag() pghandler.finish() logger.info('Done.')
def reindexIndexesFor(self, idxs=[], **query): """ Reindex p_idxs on objects of given p_portal_types. """ catalog = api.portal.get_tool('portal_catalog') brains = catalog(**query) pghandler = ZLogHandler(steps=1000) len_brains = len(brains) pghandler.info( 'In reindexIndexesFor, reindexing indexes "{0}" on "{1}" objects ({2})...'.format( ', '.join(idxs) or '*', len(brains), str(query))) pghandler.init('reindexIndexesFor', len_brains) i = 0 for brain in brains: i += 1 pghandler.report(i) obj = brain.getObject() obj.reindexObject(idxs=idxs) pghandler.finish() logger.info('Done.')