I have been fighting all day to understand a bug with the unregistration 
of a utility from a local site.

After unregistration, some instance is left in the _subscribers list of 
the utilities AdapterRegistry in my local site.

This avoids me to remove the code as it does leave a broken object.

I have come to the conclusion that the code that first registered the 
utility is the culprit : the utility itself is not persistent.

It seems that the utility instance is unserialized at least two times 
during unregistration, which leads (if I understand well) to two 
different objects in memory.

This breaks the unsubscription algorithm that is based on object identity.

I naively tried to introduce the Persistent base class into the utility 
calss. When I try to access the utility instance again, I get the error 
mentioned in the subject of this mail :

TypeError: ('object.__new__(SyncedLanguages) is not safe, use 
Persistence.Persistent.__new__()', <function _reconstructor at 
0x1004297d0>, (<class 
'Products.LinguaPlone.vocabulary.SyncedLanguages'>, <type 'object'>, None))

If I understand well, the a posteriori introduction of Persistent cannot 
happen alone.

Can anyone tell me what I should do add to the class I try to make it 
actually persistent ?

PS: It is late here, I hope I have not told too many silly things
Godefroid Chapelle (aka __gotcha) http://bubblenet.be

For more information about ZODB, see the ZODB Wiki:

ZODB-Dev mailing list  -  ZODB-Dev@zope.org

Reply via email to