source: main/waeup.sirp/trunk/src/waeup/sirp/catalog.py @ 6180

Last change on this file since 6180 was 6116, checked in by uli, 13 years ago

Remove trailing whitespace.

  • 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.