[Zope-CMF] Re: [CMF 2.1] FSPageTemplate & Unicode

Martin Aspeli optilude at gmx.net
Sat Jan 6 17:03:50 EST 2007


Hi Jens,

> getToolByName on the branch will give you a DeprecationWarning.

In light of what we're seeing here, and because there is *so* much third 
party code using getToolByName(), perhaps a DeprecationWarning (and 
worse, speedy deprecation) is a bit premature? I don't think we can get 
rid of getToolByName() for a long time, practically, but new code should 
be encouraged from using the new utility based lookup.

Before that happens, though, this needs to work 100% of the time, 
without requring client code to play aq tricks.

> The  
> branch does provide an alternative to getToolByName for untrusted  
> code that I think is close to the whole utility idea. I call it  
> "getToolByInterfaceName" and instead of a tool ID you pass in the  
> interface's dotted name as a string:
> 
> getToolByName(context, 'portal_actions')
> 
> would become
> 
> getToolByInterfaceName(context,  
> 'Products.CMFCore.interfaces.IActionsTool')
> 
> whereas everything else stays the same, meaning you can pass in a  
> default, and the method will wrap the tool before handing it back.  
> However, instead of AttributeError, this one raises  
> ComponentLookupError, but that decision can always be revisited.

So what does this really buy us over, say, a map of tools names to 
interfaces? Is it (in the short/medium term) really worth spewing 
warning from tons and tons of code?

> Now, the main issue is still there, how to deal with tool wrapping  
> when calling getUtility/queryUtility in trusted code. Doing it every  
> time right after the call is stupid. I like Tres' hardline assertion  
> that we must have it wrapped every time, automatically. This needs to  
> be implemented somehow, maybe in Five as he suggests.

I'm not quite sure I follow the argument that it must be wrapped every 
time. I agree that it must for TTW code (page templates, scripts), for 
security. For other things, we may want instead to rely on the pattern 
that's been mentioned: use getUtility(ISiteRoot) to get the portal root 
and don't rely on acquiring attributes (from self in the tool) otherwise.

I may not have fully understood the implications of this, though.

Martin



More information about the Zope-CMF mailing list