[Grok-dev] Re: catalog indexes in Grok

Philipp von Weitershausen philipp at weitershausen.de
Thu Apr 19 13:01:57 EDT 2007


Martijn Faassen wrote:
>>> Another directive you may choose to use is grok.name. This sets the 
>>> name for the catalog. If you don't use it, an unnamed catalog is used.
>>>
>>> You can use grok.context and point to a class instead of to an 
>>> interface. This works, but currently means indexes are created that 
>>> index *everything* (like in Zope 2). Indexing not restricted to that 
>>> class. This is because zope.app.catalog.attribute, to my knowledge, 
>>> currently doesn't have that facility.
>>
>> It shouldn't be too hard to customize that particular part of their 
>> behaviour.
> 
> Can you give me some clues as to what you have in mind? These are base 
> classes, and I'd rather not create new indexes just for Grok. Or do you 
> mean we should adjust zope.app.catalog.attribute directly and add a new 
> feature to it? Or perhaps you have some clever idea in mind, which is 
> what I'm hoping for.

Perhaps zc.catalog's extentcatalog could be used to do the appropriate 
filtering. Not sure.

Anyway, here's a whacky idea to make this work. Let's say we have::

   class Mammoth(grok.Model):
       pass

   class MammothIndexes(grok.Indexes):
       grok.context(Mammoth)

       name = grok.Value()
       description = grok.Text()


The index grokker would do this:

* create an interface with a predictable name (e.g.
   current.module.IMammothIndexesAdapter) on the fly

* register the indexes to only pick up objects with this interface.

* register an adapter from the Mammoth class to IMammothIndexesAdapter
   that proxies the indexed value. This could be done efficiently with
   zope.proxy.decorator.Decorator.



-- 
http://worldcookery.com -- Professional Zope documentation and training


More information about the Grok-dev mailing list