[Zope-dev] component registry navelgazing

Martin Aspeli optilude+lists at gmail.com
Sun Jun 12 17:30:35 EDT 2011


On 12 June 2011 21:48, Chris McDonough <chrism at 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?

+1

Martin


More information about the Zope-Dev mailing list