[Zope3-dev] reasonable syntax for multi-adaptation

Jim Fulton jim at zope.com
Wed Sep 26 10:33:01 EDT 2007


On Sep 26, 2007, at 10:04 AM, Brandon Craig Rhodes wrote:

> The current syntax for multi-adaptation makes the interface look like
> an object of the adaptation, rather than the actor in the operation.
> Instead, multi-adaption should look like this:
>
>   IFoo(multi=(obj1, obj2))
>
> or:
>
>   IFoo(multi=(obj1, obj2), name='site_foo')

Ah, using keyword arguments to get around limitations (especially  
backward compatibility issues) with the current API is a neat idea.

If we were going to do this though, I think a method syntax would be  
cleaner.  As in:

   IFoo.adapt([ob1, ob2], 'site_foo', None)

Note that IFoo(ob) has some special semantics that don't apply to the  
multi- or named-adapter case. In particular:

- The object is returned if it already provides the interface, and

- The object's __conform__ method is used if it is present.

Neither of these make sense in the multi- or named-adapter cases.   
Given the differences in semantics, I wouldn't want to mix the APIs.

An added complication is that interfaces don't provide adaption  
directly, but via a hook. The existing hook api wouldn't work for  
mult or named adaptation, so a new hook would be needed.

While I can see benefit from having an interface method for doing  
multi and named adaptation, I don't think the benefit is worth the cost.

I'm -1 on your proposal and -0 on my variation. :)

Jim

--
Jim Fulton
Zope Corporation




More information about the Zope3-dev mailing list