[Zope-dev] component registry navelgazing

Chris McDonough chrism at plope.com
Sun Jun 12 16:48:53 EDT 2011


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?

Let the bikeshedding begin,

- C







More information about the Zope-Dev mailing list