Laurence Rowe wrote:
On 5 September 2012 11:48, yuppie
2.) Site root lookup: =====================
In several tools we still assume aq_parent(aq_inner(self)) is the
portal. Or other code uses the tool as context object, expecting root
and request in its acquisition chain.
These should be identified and replaced by
getUtility(IURLTool).getPortalObject() or other suitable code.
Maybe we could add a convenience API for that?
getToolByName can be used instead as it does the lookups.
getToolByName is no option because it is part of the machinery that should
getUtility(IURLTool).getPortalObject() might be overkill because it adds the
request to the context. All the code that needs the request should be fixed
already. Using queryUtility(ISiteRoot) should be sufficient.
But AFAICS the only way to find all the places where this needs to be fixed
is to set up a site with tools that are not stored in the site root.
How about introducing a new getPortal() function? It could simply use
getSite() then walk back down the acquisition chain until finding an
object that directlyProvides ISiteRoot. In Plone KSS can introduce
another 'component site' between its view and the portal itself.
Not sure why the discussion takes this direction. My point was that
several CMF tools/utilities might not work correctly if the site root is
not their parent. The difficult part is not to look up the site root.
The difficult part is to figure out where a lookup is required.
I don't think relying on getSite() is a good idea. As you mention it
doesn't always return the portal object. And the fact it is stored with
the request in its context is just an accidental side effect. What would
be the advantage compared to using getUtility(ISiteRoot)?
Zope-CMF maillist - Zope-CMF@zope.org
See https://bugs.launchpad.net/zope-cmf/ for bug reports and feature requests