"""Components to help cataloging and searching objects. """ import grok from grok import index from hurry.query import Eq from hurry.query.interfaces import IQuery from hurry.query.query import Query from zope.catalog.catalog import ResultSet from zope.component import getUtility from zope.intid.interfaces import IIntIds from waeup.sirp.app import University from waeup.sirp.interfaces import IQueryResultItem from waeup.sirp.student.interfaces import IStudent class WAeUPQuery(Query): """A hurry.query-like query that supports also ``apply``. """ grok.implements(IQuery) def apply(self, query): """Get a catalog's BTree set of intids conforming to a query. """ return query.apply() def searchResults(self, query): """Get a set of ZODB objects conforming to a query. """ results = self.apply(query) if results is not None: uidutil = getUtility(IIntIds) results = ResultSet(results, uidutil) return results grok.global_utility(WAeUPQuery) class StudentIndexes(grok.Indexes): grok.site(University) grok.name('students_catalog') grok.context(IStudent) name = grok.index.Field(attribute='name') class QueryResultItem(object): grok.implements(IQueryResultItem) url = None title = None description = None def __init__(self, context, view): self.context = context self.url = view.url(context) self.title = context.title self.description = '' def search_context(query): result = Query().searchResults( Eq(('students_catalog', 'name'), query) ) return result