def addIndex(self, catalog, index, indextype): cat = self._getCatalog(catalog) if index in cat.indexes(): return if indextype == 'ZCTextIndex': addZCTextIndex(cat, index) else: cat.addIndex(index, indextype) logger.info('Catalog index %s added.' % index) indexes = self.reindexcatalog.get(cat.id, []) indexes.append(index) indexes = list(set(indexes)) self.reindexcatalog[cat.id] = indexes transaction.commit()
def addIndex(self, catalog, index, indextype): cat = self._getCatalog(catalog) if index in cat.indexes(): return if indextype == 'ZCTextIndex': addZCTextIndex(cat, index) else: cat.addIndex(index, indextype) logger.info('Catalog index %s added.' % index) indexes = self.reindexcatalog.get(cat.id, []) indexes.append(index) indexes = list(set(indexes)) self.reindexcatalog[cat.id] = indexes transaction.commit()
def setup_core_catalogs(portal): """Setup core catalogs """ logger.info("*** Setup Core Catalogs ***") to_reindex = [] for catalog, name, attribute, meta_type in INDEXES: c = api.get_tool(catalog) indexes = c.indexes() if name in indexes: logger.info("*** Index '%s' already in Catalog [SKIP]" % name) continue logger.info("*** Adding Index '%s' for field '%s' to catalog ..." % (meta_type, name)) # do we still need ZCTextIndexes? if meta_type == "ZCTextIndex": addZCTextIndex(c, name) else: c.addIndex(name, meta_type) # get the new created index index = c._catalog.getIndex(name) # set the indexed attributes if hasattr(index, "indexed_attrs"): index.indexed_attrs = [attribute or name] to_reindex.append((c, name)) logger.info("*** Added Index '%s' for field '%s' to catalog [DONE]" % (meta_type, name)) # catalog columns for catalog, name in COLUMNS: c = api.get_tool(catalog) if name not in c.schema(): logger.info("*** Adding Column '%s' to catalog '%s' ..." % (name, catalog)) c.addColumn(name) logger.info("*** Added Column '%s' to catalog '%s' [DONE]" % (name, catalog)) else: logger.info("*** Column '%s' already in catalog '%s' [SKIP]" % (name, catalog)) continue for catalog, name in to_reindex: logger.info("*** Indexing new index '%s' ..." % name) catalog.manage_reindexIndex(name) logger.info("*** Indexing new index '%s' [DONE]" % name)
def setup_catalogs(catalogs_by_type, indexes_by_catalog, columns_by_catalog): """Setup Plone catalogs """ logger.info("Setup Catalogs ...") # Setup catalogs by type for type_name, catalogs in catalogs_by_type: at = api.get_tool("archetype_tool") # get the current registered catalogs current_catalogs = at.getCatalogsByType(type_name) # get the desired catalogs this type should be in desired_catalogs = map(api.get_tool, catalogs) # check if the catalogs changed for this portal_type if set(desired_catalogs).difference(current_catalogs): # fetch the brains to reindex brains = api.search({"portal_type": type_name}) # updated the catalogs at.setCatalogsByType(type_name, catalogs) logger.info("Assign '%s' type to Catalogs %s" % (type_name, catalogs)) for brain in brains: obj = api.get_object(brain) logger.info("Reindexing '%s'" % repr(obj)) obj.reindexObject() # Setup catalog indexes to_index = [] for catalog, name, meta_type in indexes_by_catalog: c = api.get_tool(catalog) indexes = c.indexes() if name in indexes: logger.info("Index '%s' already in Catalog [SKIP]" % name) continue logger.info("Adding Index '%s' for field '%s' to catalog '%s" % (meta_type, name, catalog)) if meta_type == "ZCTextIndex": addZCTextIndex(c, name) else: c.addIndex(name, meta_type) to_index.append((c, name)) logger.info("Added Index '%s' for field '%s' to catalog [DONE]" % (meta_type, name)) for catalog, name in to_index: logger.info("Indexing new index '%s' ..." % name) catalog.manage_reindexIndex(name) logger.info("Indexing new index '%s' [DONE]" % name) # Setup catalog metadata columns for catalog, name in columns_by_catalog: c = api.get_tool(catalog) if name not in c.schema(): logger.info("Adding Column '%s' to catalog '%s' ..." % (name, catalog)) c.addColumn(name) logger.info("Added Column '%s' to catalog '%s' [DONE]" % (name, catalog)) else: logger.info("Column '%s' already in catalog '%s' [SKIP]" % (name, catalog)) continue
def setup_catalogs(portal): """Setup Plone catalogs """ logger.info("Setup Catalogs ...") # Setup catalogs by type for type_name, catalogs in CATALOGS_BY_TYPE: at = api.get_tool("archetype_tool") # get the current registered catalogs current_catalogs = at.getCatalogsByType(type_name) # get the desired catalogs this type should be in desired_catalogs = map(api.get_tool, catalogs) # check if the catalogs changed for this portal_type if set(desired_catalogs).difference(current_catalogs): # fetch the brains to reindex brains = api.search({"portal_type": type_name}) # updated the catalogs at.setCatalogsByType(type_name, catalogs) logger.info("Assign '%s' type to Catalogs %s" % (type_name, catalogs)) for brain in brains: obj = api.get_object(brain) logger.info("Reindexing '%s'" % repr(obj)) obj.reindexObject() # Setup catalog indexes to_index = [] for catalog, name, meta_type in INDEXES: c = api.get_tool(catalog) indexes = c.indexes() if name in indexes: logger.info("Index '%s' already in Catalog [SKIP]" % name) continue logger.info("Adding Index '%s' for field '%s' to catalog '%s" % (meta_type, name, catalog)) if meta_type == "ZCTextIndex": addZCTextIndex(c, name) else: c.addIndex(name, meta_type) to_index.append((c, name)) logger.info("Added Index '%s' for field '%s' to catalog [DONE]" % (meta_type, name)) for catalog, name in to_index: logger.info("Indexing new index '%s' ..." % name) catalog.manage_reindexIndex(name) logger.info("Indexing new index '%s' [DONE]" % name) # Setup catalog metadata columns for catalog, name in COLUMNS: c = api.get_tool(catalog) if name not in c.schema(): logger.info("Adding Column '%s' to catalog '%s' ..." % (name, catalog)) c.addColumn(name) logger.info("Added Column '%s' to catalog '%s' [DONE]" % (name, catalog)) else: logger.info("Column '%s' already in catalog '%s' [SKIP]" % (name, catalog)) continue logger.info("Setup Catalogs [DONE]")