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

Last change on this file since 6087 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
RevLine 
[5090]1"""Components to help cataloging and searching objects.
2"""
[3521]3import grok
[5091]4from grok import index
[3521]5from hurry.query import Eq
[5090]6from hurry.query.interfaces import IQuery
7from hurry.query.query import Query
8from zope.catalog.catalog import ResultSet
[5091]9from zope.component import getUtility
[5090]10from zope.intid.interfaces import IIntIds
11
[4920]12from waeup.sirp.app import University
[5007]13from waeup.sirp.interfaces import IQueryResultItem
[4920]14from waeup.sirp.student.interfaces import IStudent
[3521]15
[5090]16class WAeUPQuery(Query):
17     """A hurry.query-like query that supports also ``apply``.
18     """
19     grok.implements(IQuery)
[4789]20
[5090]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
[5091]35grok.global_utility(WAeUPQuery)
[5090]36
[5091]37
[3521]38class StudentIndexes(grok.Indexes):
39     grok.site(University)
40     grok.name('students_catalog')
41     grok.context(IStudent)
42
[5007]43     name = grok.index.Field(attribute='name')
[3521]44
[4789]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.