Dieter Maurer wrote at 2008-1-7 17:55 +0100:
Yesterday, I released "dm.zdoc" and today I find problems.
The analysis revealed:
The class "webdav.EtagSupport.EtagSupport" has initially no attributes "__provides__" and "__providedBy__".
For still unknown reasons, it suddenly gets these attributes. "__provides__" is a "zope.interface.declarations.ClassProvides". Therefore, I expect that Zope 3 or "five" is responsible for these additions.
"EtagSupport" is in the mro of "ManagableIndex". But nevertheless, "ManagableIndex.__provides__" results in an "AttributeError".
Here is a transscript reproducing the problem:
import App.FindHomes from webdav.EtagSupport import EtagSupport EtagSupport.__provides__ Traceback (most recent call last): File "<stdin>", line 1, in ? AttributeError: class EtagSupport has no attribute '__provides__' from Products.ManagableIndex.ManagableIndex import ManagableIndex /usr/local/lib/python24.zip/whrandom.py:38: DeprecationWarning: the whrandom module is deprecated; please use the random module DeprecationWarning) EtagSupport.__provides__ <zope.interface.declarations.ClassProvides object at 0x40b5566c> ManagableIndex.__provides__ Traceback (most recent call last): File "<stdin>", line 1, in ? AttributeError: __provides__ from inspect import getmro EtagSupport in getmro(ManagableIndex) True
Any ideas?
I think I understand the behavior -- and I think it is a "zope.interface" bug. Under some circumstances "zope.interface" adds a "__provides__" descriptor to a class. The descriptor is implemented in "zope/interface/_zope_interface_coptimizations.c" and called "CPB_descr_get". While "__implements__" is inherited by derived classes, the inherited "__provides__" refuses to work for a derived class and raises "AttributeError: __provides__" instead, the AttriuteError, I observe.... I will try to make my failure independent of "ManagableIndex" and then file a bug report. -- Dieter