[Zope3-Users] Re: [Z3lab-checkins] r24502 -
	in	z3lab/cpsskins/trunk:
	. browser/editor browser/skin elements/formats
    Jim Fulton 
    jim at zope.com
       
    Wed Jun 29 07:11:05 EDT 2005
    
    
  
Florent Guillaume wrote:
...
>> +################################################################
>> +
>> +def renderItems(content, start='', repeat='%s', separator='',  
>> end='', **kw):
>> +    if IMenuItems.providedBy(content):
>> +        items_markup = [start]
>> +        items_append = items_markup.append
>> +        for item in content:
>> +            items_append(repeat % (item['url'], item['title']))
>> +            items_append(separator)
>> +        items_append(end)
>> +        return ''.join(items_markup)
>> +    else:
>> +        return ''
> 
> 
> In general in Zope 3 it's my understanding that it's better to do
> 
> try:
>     c = IMenuItems(content)
> except ComponentLookupError:
>     return ''
> ... c used as iterable ...
> return ...
Note that I prefer:
    c = IMenuItems(content, None)
    if c is None:
       return ''
    ...
> than testing directly for the provided interface, as it gives an  
> opportunity for an adapter to do its job. It's probably slower  though, 
> and maybe not a pattern generally used for marker interfaces.  Opinions ?
IMO, testing for an interface is sometimes preferable to using an adapter.
Some people feel very strongly that you should never test for an interface
-- I don't.
It seems silly to add an adapter just to avoid using a test
(for religious reasons iow).
In particular, providing adapters to handle cases where an object
doesn't provide some service and can't really be adapted to provide
a service seems really silly to me.
Jim
-- 
Jim Fulton           mailto:jim at zope.com       Python Powered!
CTO                  (540) 361-1714            http://www.python.org
Zope Corporation     http://www.zope.com       http://www.zope.org
    
    
More information about the Zope3-users
mailing list