[Grok-dev] Catalog Utility
Vanderson Mota dos Santos
vanderson.mota at gmail.com
Wed Mar 25 21:24:08 EDT 2009
Wow! Really nice man. I'll implement it here and return the results.
thanks a lot!
2009/3/25 Ruslan Spivak <ruslan.spivak at gmail.com>
> Vanderson Mota dos Santos <vanderson.mota at gmail.com> writes:
>
> > Hi,
> >
> > I'm developing with some friends a "real world" grok application, and by
> > now, i've used the hurry.query, according with the site documentation.
> >
> > I would like to know if is there any implementation of catalog like
> plone's
> > portal_catalog, because i don't want to create a new grok.Indexes class
> just
> > to index some attribute in a diferent model/context.
> >
> > If such thing doesn't exists, can someone give an opnion about building
> it
> > or if is there a better option instead of making a centralized catalog
> > utility?
> >
>
> I whipped out some code that you can use a basis for registering indexes
> in one place:
>
> import grok
>
> from grok.meta import IndexesSetupSubscriber
> from zope.app.catalog.field import FieldIndex
> from zope.app.catalog.text import TextIndex
> from zc.catalog.catalogindex import SetIndex
>
> # Your interfaces
> from zope.dublincore.interfaces import IZopeDublinCore
> from zope.index.text.interfaces import ISearchableText
>
> def setup_indexes(catalog):
> """Custom indexes to populate catalog"""
>
> # index_name, index_class,
> # attr_name, attr_interface, attr_is_callable
> indexes = (
> ('title', TextIndex,
> 'title', None, False),
>
> ('created', FieldIndex,
> 'created', IZopeDublinCore, False),
>
> ('searchable', TextIndex,
> 'getSearchableText', ISearchableText, True),
> )
>
> for (index_name, index_class,
> name, iface, callable) in indexes:
>
> catalog[index_name] = index_class(
> field_name=name,
> interface=iface,
> field_callable=callable
> )
>
> # Hack Grok's IndexesSetupSubscriber
> class CustomIndexesSetupSubscriber(IndexesSetupSubscriber):
>
> def __init__(self):
> """Override base class constructor."""
> self.catalog_name = u''
>
> def __call__(self, site, event):
> """Override base class's __call__"""
> self._createIntIds(site)
> catalog = self._createCatalog(site)
>
> setup_indexes(catalog)
>
>
> # Your application class
> class Sample(grok.Application, grok.Container):
> pass
>
> @grok.subscribe(Sample, grok.IObjectAddedEvent)
> def registerCatalogIndexes(app, event):
> subscriber = CustomIndexesSetupSubscriber()
> # call it to set up catalog and indexes
> subscriber(app, event)
>
>
> Main steps:
> 1) subscriber handler for your site's IObjectAddedEvent
>
> 2) use Grok's IndexesSetupSubscriber with overridden
> __init__ and __call__ and hook your index creation
> routine (as done above).
>
> 3) add indexes to catalog without using Grok's Indexes
> machinery
>
> For more information about indexes and catalog check out:
>
> http://svn.zope.org/zope.catalog/trunk/src/zope/catalog/
> http://svn.zope.org/zope.index/trunk/src/zope/index/
> http://svn.zope.org/zc.catalog/trunk/src/zc/catalog/
>
> Hope it helps you to move further.
>
> Cheers,
> Ruslan
> --
>
> http://ruslanspivak.com
>
--
Vanderson Mota dos Santos
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.zope.org/pipermail/grok-dev/attachments/20090325/e7cf16c0/attachment.html
More information about the Grok-dev
mailing list