def test_load_selectable_schema(self): model = loadString(self.selectable_schema) # only colums with one field may be selectable self.assertEqual( sorted(get_selectable_fields(model.schema)), ['works'] )
def __init__(self, schema, fields, custom_title=None): self.schema = schema self.fields = tools.order_fields_by_schema(fields, schema) if custom_title is not None: self.titles = [custom_title] else: self.titles = [] for field in self.fields: if field in self.schema: self.titles.append(self.schema[field].title) else: self.titles.append(field) self.contains_title_field = bool( set(self.fields) & set(get_title_fields(self.schema)) ) self.selectable = ( len(self.fields) == 1 and self.fields[0] in get_selectable_fields( self.schema ) ) self.filter_key = self.selectable and self.fields[0] or None
def update_selectable_field_indexes(fti): catalog = api.portal.get_tool(catalog_id) fields = get_selectable_fields(fti.lookupSchema()) new_indexes = [] # remove the indexes which are no longer used prefix = get_selectable_prefix(fti.id) for ix in get_selectable_field_indexes(fti): field = ix.replace(prefix, '') if field not in fields: catalog.delIndex(ix) # add the indexes which are not yet defined for field in fields: index_name = get_selectable_field_ix(fti.id, field) if index_name not in catalog.indexes(): catalog.addIndex(index_name, 'KeywordIndex', extra={ 'indexed_attrs': field }) new_indexes.append(index_name) return new_indexes