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

Last change on this file since 6374 was 6207, checked in by Henrik Bettermann, 13 years ago

Fix indentation. We use only 4 whitespaces not 5. Remove #BBB.

  • Property svn:eol-style set to native
File size: 1.6 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
37class StudentIndexes(grok.Indexes):
38    grok.site(University)
39    grok.name('students_catalog')
40    grok.context(IStudent)
41
42    name = grok.index.Field(attribute='name')
43
44class QueryResultItem(object):
45    grok.implements(IQueryResultItem)
46    url = None
47    title = None
48    description = None
49
50    def __init__(self, context, view):
51        self.context = context
52        self.url = view.url(context)
53        self.title = context.title
54        self.description = ''
55
56def search_context(query):
57    result = Query().searchResults(
58        Eq(('students_catalog', 'name'), query)
59        )
60    return result
Note: See TracBrowser for help on using the repository browser.