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





_______________________________________________
Zope-Dev maillist  -  Zope-Dev@zope.org
https://mail.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
 https://mail.zope.org/mailman/listinfo/zope-announce
 https://mail.zope.org/mailman/listinfo/zope )

Reply via email to