[Grok-dev] Re: MultiAdapter doc bug?
Philipp von Weitershausen
philipp at weitershausen.de
Tue Jun 24 05:04:47 EDT 2008
Graham Stratton wrote:
> The documentation in
> http://svn.zope.org/grok/tags/0.13/doc/reference/components.rst implies
> that you can get a multiadapter like this:
> >>> home = IHome(cave, fireplace)
> I'm pretty sure this doesn't work.
As Tim said, this isn't a multi-adapter lookup. Single-adapter lookup
with an interface is of the form
> It certainly isn't how we do the lookup in our tests:
> >>> home = zope.component.getMultiAdapter((cave, fireplace))
> I think that if you want to specify the interface you're adapting to you
> can do:
> >>> home = zope.component.getMultiAdapter((cave, fireplace), IHome)
> To be honest I don't understand why you wouldn't want to specify the
> interface you're adapting to.
Right. You should always specify the interface you're adapting to. If
you don't, zope.interface.Interface is assumed.
Due to some very very old legacy, we look up views for
zope.interface.Interface (instead of a dedicated publishing interface),
which is why you may sometimes see code like this:
getMultiAdapter((obj, request), name="foo.html")
(no interface specified, so z.i.Interface is the assumed default).
HOpefully this will be changed soon.
> Assuming this is a bug I'll fix it if someone suggests which of the
> above options is the preferred approach.
The preferred approach is to do
getMultiAdapter((obj1, obj2, ..., objN), targetiface, name=...)
More information about the Grok-dev