def __init__(self): self.data_adapter = DefaultCatalogDataAdapter(None) self.mappings = {} for type_name, schema in get_utilities_for(IResourceFactory): self.mappings[type_name] = {} for schema in iter_schemata_for_type(type_name): for field_name, index_data in merged_tagged_value_dict( schema, directives.index.key).items(): index_name = index_data.get('index_name', field_name) self.mappings[type_name][index_name] = { 'schema': schema, 'properties': index_data }
async def __call__(self): # For each type values = {} for schema in iter_schemata_for_type(self.content.portal_type): behavior = schema(self.content) for index_name, index_data in merged_tagged_value_dict( schema, index.key).items(): try: if 'accessor' in index_data: values[index_name] = await apply_coroutine( index_data['accessor'], behavior) else: values[index_name] = self.get_data( behavior, schema, index_name) except NoIndexField: pass for metadata_name in merged_tagged_value_list( schema, metadata.key): values[metadata_name] = self.get_data(behavior, schema, metadata_name) return values
def get_index_fields(type_name): mapping = {} for schema in iter_schemata_for_type(type_name): # create mapping for content type mapping.update(merged_tagged_value_dict(schema, index.key)) return mapping
def get_metadata_fields(type_name): fields = [] for schema in iter_schemata_for_type(type_name): # create mapping for content type fields.extend(merged_tagged_value_list(schema, metadata.key)) return fields