On Mon, Jun 13, 2011 at 12:38 PM, Jim Fulton <jim@zope.com> wrote:
On Sun, Jun 12, 2011 at 4:48 PM, Chris McDonough <chrism@plope.com> wrote:
Currently if you ask a registry to singly-adapt an object to an interface, and the object you're trying to adapt implements that interface, here's what happens:
from zope.component.registry import Components c = Components() from zope.interface import Interface, implements class IFoo(Interface): pass ... class Foo(object): ... implements(IFoo) ... foo = Foo() c.queryAdapter(IFoo, foo) <None>
In order to get the object itself back from such an adaptation, you need to use the default= argument.
c.queryAdapter(IFoo, foo, default=foo) <__main__.Foo object at 0x24a3910>
This seems slightly inconsistent with the adaptation worldview imposed by getAdapter/queryAdapter. I think it would be more consistent if "c.queryAdapter(IFoo, foo)" returned foo if foo already implemented IFoo and there was no other more specific adapter registered for the IFoo/foo pair in the registry, no?
I don't know what getAdapter/queryAdapter you're referring to in "This seems slightly inconsistent with the adaptation worldview imposed by getAdapter/queryAdapter."
Do you mean " This seems slightly inconsistent with the adaptation worldview imposed by interface __call__." ?
By the later messages, I can see that that is what you meant to say. Jim -- Jim Fulton http://www.linkedin.com/in/jimfulton