Hello, I like to refactor my code and often make broken interfaces:
On a ZODB object I do an alsoProvide of an interface. Now I remove the corresponding code for that interface (and that object but it is not required) and I restart my server. I didn't moved them, I just removed them. (If I moved them I would use zodbupdate, and have no problem). But let say I need to remove that object from ZODB. Unpickling that object fail in the custom set_state of zope.interface with the well known error: File ".../zope.interface-3.5.3-py2.6-linux-i686.egg/zope/interface/adapter.py", line 470, in add_extendor for i in provided.__iro__: AttributeError: type object 'IKeyManager' has no attribute '__iro__' Because it expect to get an interface to restore the alsoProvides, and got a broken interface instead (which is just like a regular broken object). And you cannot access your ZODB anymore, since this broken object, with its broken interface is unpickled when its container is. I found a way 'to prevent' this error, by adding an attribute __iro__ which is an empty tuple to OFS.Uninstalled.BrokenClass. That let me load this broken object, and delete it (along with the reference to the broken interface). I think it is the good behavior, and since you cannot modify a broken object, if you put back the code after, your object will work again, with its interface provided as well. If we can fix this problem in Zope 2, (with this solution, or an another), I would be the most happy user of all :). Regards, Sylvain, -- Sylvain Viollon -- Infrae t +31 10 243 7051 -- http://infrae.com Hoevestraat 10 3033GC Rotterdam -- The Netherlands _______________________________________________ Zope-Dev maillist - Zope-Dev@zope.org https://mail.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - https://mail.zope.org/mailman/listinfo/zope-announce https://mail.zope.org/mailman/listinfo/zope )