[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