[Zope-dev] zope.component: calling an Interface and calling queryAdapter give differing results
Philipp von Weitershausen
philipp at weitershausen.de
Tue Aug 19 15:48:48 EDT 2008
Shane Hathaway wrote:
> Chris Withers wrote:
>> From a user's perspective, this makes no sense:
>>
>> >>> from zope.interface import implements,Interface
>> >>> from zope.component import queryAdapter
>> >>> class ISomething(Interface): pass
>> ...
>> >>> class MyClass: implements(ISomething)
>> ...
>> >>> m = MyClass()
>>
>> Right, so this does make sense:
>>
>> >>> ISomething(m)
>> <__main__.MyClass instance at 0x00BED6E8>
>>
>> This does not:
>> >>> repr(queryAdapter(m,ISomething))
>> 'None'
>
> Looks like a bug to me. If the object passed as the first argument to
> queryAdapter() implements the interface passed as the second argument, I
> believe queryAdapter() should return the object, regardless of any
> component registrations.
No, it's not a bug. This is in fact a feature (like it or not).
{query|get}Adapter will always try to look up an adapter, whether or not
the object provides the interface. So the behaviour Chris observed is
indeed intended. I agree it could be documented better.
More information about the Zope-Dev
mailing list