def fix_searchable_text(context=None): # Fix bytes in opkapiindex # See https://github.com/plone/Products.CMFPlone/issues/2905 from Products.ZCTextIndex.interfaces import IZCTextIndex from Products.ZCTextIndex.interfaces import ILexicon catalog = api.portal.get_tool('portal_catalog') zctextindex = catalog._catalog.indexes['SearchableText'] opkapiindex = zctextindex.index values = opkapiindex._docwords.values() first_item = values[0] if isinstance(first_item, bytes): log.info('Rebuilding ZCTextIndexes. First item is a byte:') log.info(first_item) lexica = [i for i in catalog.values() if ILexicon.providedBy(i)] for lexicon in lexica: lexicon.clear() indexes = [ i for i in catalog.Indexes.objectValues() if IZCTextIndex.providedBy(i) ] for index in indexes: try: index.clear() except AttributeError as e: log.info(e) log.info('rebuilding {}'.format(index.__name__)) catalog._catalog.reindexIndex(index.__name__, getRequest()) else: log.info('Not rebuilding ZCTextIndexes. First item is not bytes:') log.info(first_item)
def mapSortableIndexes(self, values): """Map sortable indexes""" catalog = getToolByName(getSite(), 'portal_catalog')._catalog sortables = {} for key, field in values.get('%s.field' % self.prefix).iteritems(): if (field['sortable'] and key in catalog.indexes and not IZCTextIndex.providedBy(catalog.getIndex(key))): sortables[key] = values.get('%s.field.%s' % (self.prefix, key)) values['sortable'] = sortables return values
def upgradeToI18NCaseNormalizer(context): """Upgrade lexicon to I18N Case Normalizer """ catalog = getToolByName(context, 'portal_catalog') for index in catalog.Indexes.objectValues(): if IZCTextIndex.providedBy(index): index_id = index.getId() logger.info("Reindex %s index with I18N Case Normalizer", index_id) catalog.manage_clearIndex([index_id]) catalog.reindexIndex(index_id, aq_get(context, 'REQUEST', None)) pass
def upgradeToI18NCaseNormalizer(context): """Upgrade lexicon to I18N Case Normalizer """ catalog = getToolByName(context, 'portal_catalog') for index in catalog.Indexes.objectValues(): if IZCTextIndex.providedBy(index): logger.info("Reindex %s index with I18N Case Normalizer",\ index.getId()) catalog.reindexIndex(index.getId(),\ aq_get(context, 'REQUEST', None)) pass
def upgradeToI18NCaseNormalizer(context): """Upgrade lexicon to I18N Case Normalizer """ catalog = getToolByName(context, "portal_catalog") for index in catalog.Indexes.objectValues(): if IZCTextIndex.providedBy(index): index_id = index.getId() logger.info("Reindex %s index with I18N Case Normalizer", index_id) catalog.manage_clearIndex([index_id]) catalog.reindexIndex(index_id, aq_get(context, "REQUEST", None)) pass
def reindex_zctext_indices(self): """Rewrite of plone.app.upgrade.v43.alphas.upgradeToI18NCaseNormalizer to use ftw.upgrade progress logging. """ catalog = api.portal.get_tool('portal_catalog') for index in catalog.Indexes.objectValues(): if IZCTextIndex.providedBy(index): index_id = index.getId() # Clear index first to make sure lexicon gets updated properly catalog.manage_clearIndex([index_id]) self.catalog_rebuild_index(index_id)
def mapSortableIndexes(self, values): """Map sortable indexes""" catalog = getToolByName(getSite(), 'portal_catalog')._catalog sortables = {} for key, field in values.get('%s.field' % self.prefix).iteritems(): if ( field['sortable'] and key in catalog.indexes and not IZCTextIndex.providedBy(catalog.getIndex(key)) ): sortables[key] = values.get('%s.field.%s' % (self.prefix, key)) values['sortable'] = sortables return values
def reindexZCTextIndex(context): """ Reindex ZCTextIndex """ portal = getToolByName(context, 'portal_url').getPortalObject() catalog = getToolByName(portal, 'portal_catalog') query = {'Language': 'all'} brains = catalog(**query) indexes = catalog.Indexes.objectValues() idxs = [] for index in indexes: if IZCTextIndex.providedBy(index): idxs.append(index.getId()) utils.bulkReindexObjects(context, brains, idxs)