source: main/waeup.sirp/branches/ulif-fasttables/src/waeup/sirp/catalog.py @ 11105

Last change on this file since 11105 was 5091, checked in by uli, 15 years ago
  • Fix imports.
  • Register WAeUPQuery as an unnamed global utility.
  • Property svn:eol-style set to native
File size: 1.7 KB
Line 
1"""Components to help cataloging and searching objects.
2"""
3import grok
4from grok import index
5from hurry.query import Eq
6from hurry.query.interfaces import IQuery
7from hurry.query.query import Query
8from zope.catalog.catalog import ResultSet
9from zope.component import getUtility
10from zope.intid.interfaces import IIntIds
11
12from waeup.sirp.app import University
13from waeup.sirp.interfaces import IQueryResultItem
14from waeup.sirp.student.interfaces import IStudent
15
16class WAeUPQuery(Query):
17     """A hurry.query-like query that supports also ``apply``.
18     """
19     grok.implements(IQuery)
20
21     def apply(self, query):
22          """Get a catalog's BTree set of intids conforming to a query.
23          """
24          return query.apply()
25
26     def searchResults(self, query):
27          """Get a set of ZODB objects conforming to a query.
28          """
29          results = self.apply(query)
30          if results is not None:
31               uidutil = getUtility(IIntIds)
32               results = ResultSet(results, uidutil)
33          return results
34
35grok.global_utility(WAeUPQuery)
36
37
38class StudentIndexes(grok.Indexes):
39     grok.site(University)
40     grok.name('students_catalog')
41     grok.context(IStudent)
42
43     name = grok.index.Field(attribute='name')
44
45class QueryResultItem(object):
46     grok.implements(IQueryResultItem)
47     url = None
48     title = None
49     description = None
50     
51     def __init__(self, context, view):
52          self.context = context
53          self.url = view.url(context)
54          self.title = context.title
55          self.description = ''
56
57def search_context(query):
58     result = Query().searchResults(
59          Eq(('students_catalog', 'name'), query)
60          )
61     return result
Note: See TracBrowser for help on using the repository browser.