def render(self, request): packages = self.env.registry.getPackageIds() resourcetypes = self.env.registry.getAllPackagesAndResourceTypes() index_types = sorted(INDEX_TYPES) index_types_dict = {} for i, v in INDEX_TYPES.iteritems(): index_types_dict[v] = i data = { 'index_types': index_types, 'index_types_dict': index_types_dict, 'package_id': '', 'resourcetype_id': '', 'indexes': [], 'error': '', 'xpath': '', 'label': '', 'options': '', 'packages': packages, 'resourcetypes': resourcetypes, 'resturl': self.env.getRestUrl(), } if request.method == 'POST': args = request.args data['package_id'] = args.get('package_id', [''])[0] data['resourcetype_id'] = args.get('resourcetype_id', [''])[0] if 'add' in args.keys() and 'xpath' in args: data['label'] = args.get('label', [''])[0] data['xpath'] = args.get('xpath', [''])[0] data['type_id'] = args.get('type_id', [''])[0] data['options'] = args.get('options', [None])[0] data = self._addIndex(data) elif 'delete' in args and 'index[]' in args: data['index[]'] = args['index[]'] data = self._deleteIndexes(data) elif 'reindex' in args and 'index[]' in args: data['index[]'] = args['index[]'] data = self._reindexIndexes(data) elif 'reindex-all' in args: data = self._reindexResourceType(data) elif 'filter' in args: data = self._getIndexes(data) return data
def getIndexes(self, package_id=None, resourcetype_id=None, xpath=None, group_path=None, type=None, options=None, _id=None, label=None): """ Return a list of all applicable XMLIndex objects. """ # check for grouping indexes if xpath and '#' in xpath: group_path, temp = xpath.split('#', 1) xpath = '/'.join([group_path, temp]) if type: type = INDEX_TYPES.get(type.lower(), TEXT_INDEX) return self.index_catalog.getIndexes(package_id=package_id, resourcetype_id=resourcetype_id, xpath=xpath, group_path=group_path, type=type, options=options, _id=_id, label=label)
raise InvalidParameterError(msg) # check if valid index type if type.lower() not in INDEX_TYPES: msg = "registerIndex: Invalid index type '%s'." raise InvalidParameterError(msg % type) # check for grouping indexes xpath = xpath.strip() group_path = None if '#' in xpath: try: group_path, temp = xpath.split('#') except ValueError, e: msg = "registerIndex: Invalid index expression. %s" raise InvalidParameterError(msg % str(e)) xpath = '/'.join([group_path, temp]) type = INDEX_TYPES.get(type.lower()) _, resourcetype = self.env.registry.objects_from_id(package_id, resourcetype_id) # generate index xmlindex = XmlIndex(resourcetype=resourcetype, label=label, xpath=xpath, type=type, options=options, group_path=group_path) xmlindex = self.index_catalog.registerIndex(xmlindex) return xmlindex def deleteIndex(self, xmlindex=None, _id=None): """ Remove an index using either a XMLIndex object or a index id. """ if _id: xmlindex = self.getIndexes(_id=_id)[0]