Adapters are only searched one deep, so you need to register each adapter path separately. I use this function as a helper:

from zope.component import provideAdapter

def provideAdapterChain(adapt_from, *chain):
    '''
    Register an adapter chain
    adapt_from is the interface that is adapted from
    chain is the chain of interfaces that should be walked
    eg
        providAdapterChain(IA, IB, IC)
    '''

    return provideAdapter(
lambda adaptee: reduce(lambda ob, iface: iface(ob), chain, adaptee),
        adapts=[adapt_from],
        provides = chain[-1])


Laurence

Frank Burkhardt wrote:
Hi,

I've got objects implementing interface

 IMyObject
and two adapters:

 IMyObject -> ISearchable
 ISearchable -> ISearchableEN

I would like to use a TextIndex to do fulltext search on objects
implementing ISearchableEN .
Unfortunately this doesn't work. The TextIndex tries something
like this to adapt an object to the given interface:

 ISearchableEN(myobject)

Which fails ("Unable to adapt") because there is no adapter
"IMyObject -> ISearchableEN" and Zope doesn't try to adapt multiple
times ( IMyObject -> ISearchable -> ISearchableEN ).

Does anyone have an Idea how to do this or do I have to modify
the TextIndex?

Regards,

Frank

_______________________________________________
Zope3-users mailing list
Zope3-users@zope.org
http://mail.zope.org/mailman/listinfo/zope3-users

Reply via email to