[Zope-CMF] Tools as local utilities

Martin Aspeli optilude at gmx.net
Sat Sep 9 16:57:45 EDT 2006

Hi guys,

philiKON pointed out something interesting to me the other day - we 
could actually register the existing tools as local utilities as of Zope 
2.10. That way, you could do this:

   actions = getUtility(IActionsTool)

as another spelling for

   actions = getToolByName(context, 'portal_actions')

But now we're being more consistent with Zope 3, we are using a proper 
interface and not just a string to check, we don't have to worry about 
passing a context parameter (though tests have to do a setSite() call), 
and we can let the registration be overridden with the component 
registry operations.

Note that I'm not saying we move the tools out of 
${site_root}/portal_actions or whatever - they can still live there in 
the ZODB. You just reference them in the registerUtility() call.

For this to happen, we'd need to:

  - Make the site root into an actual site (Plone already does this, 
it's only two lines of code)

  - Do the appropriate registrations of the utilities. We could probably 
do this in the handler for toolset.xml. GSLocalAddOn already has the GS 
code to talk to the site manager.

  - Make sure that tests made a call to setSite(self.portal) in 
afterSetUp or similar if they wanted to use the getUtility() syntax. Of 
course, this won't affect tests or other code that still uses the 
getToolByName() syntax.

All in all, it's probably zero negative impact and a nice step towards 
Zope 3, in that we could deprecate getToolByName() in some distant 
future in favour of more Zope3-style lookup.


More information about the Zope-CMF mailing list