[Zope-dev] Zope 2 and broken interfaces
Tres Seaver
tseaver at palladion.com
Thu Sep 23 08:11:41 EDT 2010
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Sylvain Viollon wrote:
> 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 :).
Your strategy seems pretty reasonable to me. Please file a bug with
your patch.
Tres.
- --
===================================================================
Tres Seaver +1 540-429-0999 tseaver at palladion.com
Palladion Software "Excellence by Design" http://palladion.com
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iEYEARECAAYFAkybQ/0ACgkQ+gerLs4ltQ5XyQCcDob+Nxf5gpfXqBo8vYp5KSFT
yU0An3IAG6FUg4S5F1fbtN2JcmV4tkuk
=A6mD
-----END PGP SIGNATURE-----
More information about the Zope-Dev
mailing list