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)

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

Zope-Dev maillist  -
**  No cross posts or HTML encoding!  **
(Related lists - )

Reply via email to