[Zope-dev] zope.component: calling an Interface and calling queryAdapter give differing results

Marius Gedminas marius at gedmin.as
Wed Aug 20 09:41:33 EDT 2008


On Tue, Aug 19, 2008 at 11:19:12PM +0100, Chris Withers wrote:
> However, how should I go about adapting an object to an interface where 
> there may or may not be an adapter registered?

obj = ISomething(otherobj, None)

> The natural way would seem to be:
> 
> obj = ISomething(otherobj,default=None)

I like this version.  It's much clearer.

> ...but I seem to remember people finding reasons why implementing that 
> would never be possible.

I think that was about making ISometing(foo, bar) do a multi-adapter
lookup instead of the current semantics (using bar as the default).

>  From a use point of view, I'd only expect queryAdapter to consider 
> looking for a named adapter if I actually provide a name. If I provide 
> no name, it would seem logical to look up a non-named adapter. If 
> looking up a non-named adapter, it would make sense if the object 
> already provides the desired interfaces to just return the object.
> 
> I'd love to see where this expectation is faulty...

It's also what I expected, and Jim managed to convince me I was wrong.
Well, almost.  I still think there's a smell if something doesn't work
the way people expect, even if it all seems very elegant after a long
protracted explanation.

FWIW, there's another difference between ISomething(foo) and
getAdapter(foo, ISomething):

    class SampleObject(object):
        def __conform__(self, iface):
            if iface is ISomething:
                return self.something

    obj = SampleObject()
    obj.something = SomethingElse()

ISomething(obj) will return obj.something.

getAdapter(obj, ISomething) will raise a ComponentLookupError.

Marius Gedminas
-- 
<Corsac> yeah, i'm reading the answers, currently
<Corsac> but what I see is that there is no real procedure to rebuild initfs
<Corsac> the common way seems to use a loop device with a jffs2 filesystem, put
         original files there, and add other files, then umount, flash and pray
   <dwd> Corsac: You forgot "ritual sacrifice of a medium sized rodent".
         Without that, it'll never work.
   <zuh> And if it doesn't work the first time, re-adjust towel ordering in the
         restroom and try again
                -- #maemo
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
Url : http://mail.zope.org/pipermail/zope-dev/attachments/20080820/38af64a9/attachment.bin 


More information about the Zope-Dev mailing list