[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