On 08/07/2010 07:19, Michael Howitz wrote: > To adapt A to C you have to define a specific adapter to do this adaption. > This adapter could look like this: > > @zope.component.adapter(InterfaceA) > @zope.interface.implementer(InterfaceC) > def adaptAC(a): > return InterfaceC(InterfaceB(a)) > > (You still have to register this adapter but the decorators make it easier to > register it via ZCML.) > > The reason why this does not work out of the box is that zope.component had > to guess the chain. It had to do conflict resolution when there is more than > one chain. Think of chains with more than two elements, this can lead to a > huge matrix of possible chains where each has to be tested if it works. > > And at least: explicit is better than implicit.
Thanks for the clarification that this isn't intended to work. I must've read an unreliable rumour at some point :) I can see that in the general case this has a change to spiral up into a large matrix, but for a list of a few tens to hundreds of adapters I'm not sure this would be too bad, especially the network formed by adapters isn't fully connected. Adding a cache to this would speed up commonly requested adapters to reasonable levels. Storing a directed graph in memory and running a good path-finding algorithm over it could be a starting point if this functionality was desired. I'm not sure how the PyProtocols mentioned by Justin does this, and what its efficiency characteristics are. However, I can see that multi-adaptors complicate this picture substantially. And I imagine the topic has come up and been dismissed before, can anyone point me toward any previous discussions? It sounds like a fun project, but I don't want to start down a rabbit hole if it's already been deemed unwise! Mike. -- Netsight / www.netsight.co.uk 0117 909 0901 (ext. 23) _______________________________________________ bluebream mailing list [email protected] https://mail.zope.org/mailman/listinfo/bluebream
