Пример #1
0
 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()
Пример #2
0
    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.')
Пример #3
0
 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.')
Пример #4
0
 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.')