[Checkins] SVN: zodbupdate/trunk/src/zodbupdate/serialize.py Update broken class to support Products.Five.site.localsite FiveSiteManager

Sylvain Viollon sylvain at infrae.com
Tue Jun 8 11:03:46 EDT 2010


Log message for revision 113280:
  Update broken class to support Products.Five.site.localsite FiveSiteManager
  

Changed:
  U   zodbupdate/trunk/src/zodbupdate/serialize.py

-=-
Modified: zodbupdate/trunk/src/zodbupdate/serialize.py
===================================================================
--- zodbupdate/trunk/src/zodbupdate/serialize.py	2010-06-08 14:44:45 UTC (rev 113279)
+++ zodbupdate/trunk/src/zodbupdate/serialize.py	2010-06-08 15:03:45 UTC (rev 113280)
@@ -12,7 +12,7 @@
 #
 ##############################################################################
 
-from ZODB.broken import find_global, Broken
+from ZODB.broken import find_global, Broken, rebuild
 import cPickle
 import cStringIO
 import logging
@@ -25,6 +25,21 @@
     return isinstance(symb, types.TypeType) and Broken in symb.__mro__
 
 
+class ZODBBroken(Broken):
+    """Extend ZODB Broken to work with broken objects that doesn't
+    have any __Broken_newargs__ sets. This seems to happens with Zope2
+    Persistence objects.
+    """
+
+    def __reduce__(self):
+        """We pickle broken objects in hope of being able to fix them later.
+        """
+        return (rebuild,
+                ((self.__class__.__module__, self.__class__.__name__)
+                 + getattr(self, '__Broken_newargs__', ())),
+                self.__Broken_state__,
+                )
+
 class ZODBReference:
     """Class to remenber reference we don't want to touch.
     """
@@ -83,7 +98,7 @@
 
         Using ZODB find_global let us manage missing classes.
         """
-        return find_global(*self.__update_symb(klass_info))
+        return find_global(*self.__update_symb(klass_info), Broken=ZODBBroken)
 
     def __persistent_load(self, reference):
         """Load a persistent reference. The reference might changed



More information about the checkins mailing list