[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