[Zope3-Users] Re: Adapting multiple times
Laurence Rowe
l at lrowe.co.uk
Wed Apr 5 13:06:40 EDT 2006
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
More information about the Zope3-users
mailing list