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']
        )
Example #2
0
    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
Example #3
0
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