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

Jeffrey P Shell jeffrey@cuemedia.com
Thu, 21 Nov 2002 00:06:04 -0700


What about ``if callable(aq_base(newKeywords)):`` to remove potential 
acquisition wrappers?

On Wednesday, November 20, 2002, at 12:41  PM, Casey Duncan wrote:

> Just a note that this can't be put in Zope 2.6 since functions and 
> methods
> don't have a __call__ in Python 2.1.
>
> -Casey
>
> On Wednesday 20 November 2002 02:33 pm, Steve Alexander wrote:
>> 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
>
> _______________________________________________
> Zope-Dev maillist  -  Zope-Dev@zope.org
> http://lists.zope.org/mailman/listinfo/zope-dev
> **  No cross posts or HTML encoding!  **
> (Related lists -
>  http://lists.zope.org/mailman/listinfo/zope-announce
>  http://lists.zope.org/mailman/listinfo/zope )