[Zope-dev] KeywordIndex and PersistentList (Bug?)

Steve Alexander steve@cat-box.net
Wed, 20 Nov 2002 19:33:10 +0000


Thomas Guettler wrote:

> Hi!
>
> In KeywordIndex the newKeywords get called
> if they are "callable":
>     def _get_object_keywords(self,obj):
>         newKeywords = getattr(obj, self.id, ())
>         if callable(newKeywords):               # (*)
> 			newKeywords = newKeywords()
>         if hasattr(newKeywords,'capitalize'): # is it string-like ?
>             newKeywords = (newKeywords, )
>         return newKeywords
>
> This fails if the newKeywords are stored in a PersistentList.
>
> Callable is true, but there is no __call__ attribute.
>
> I changed the line marked with (*) to
>  if hasattr(newKeyword, "__call__"):
>
> and this seems to work
>
> I think this does not break anything and could be included in the
> original.
>
> Am I the first how uses PersistentList for an indexed attribute? Is
> there a reason not to do so?


The KeywordIndex should be changed to check for the __call__ attribute, 
rather than relying on 'callable'. You cannot reliably use 'callable' 
when you're also using acquisition wrappers.

See my comment to this Collector report.

   http://collector.zope.org/Zope/578

I suggest you report the bug you have found in the Collector.

--
Steve Alexander