[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