SVN: ZODB/trunk/src/ Merged the hannosch-ibroken branch which provides an interface for

Jim Fulton <[email protected]>
Newsgroups gmane.comp.python.zope.zodb.cvs
Message-ID <[email protected]>
Log message for revision 107799:
  Merged the hannosch-ibroken branch which provides an interface for
  broken objects.
  

Changed:
  U   ZODB/trunk/src/CHANGES.txt
  U   ZODB/trunk/src/ZODB/broken.py
  U   ZODB/trunk/src/ZODB/interfaces.py
  U   ZODB/trunk/src/ZODB/tests/testBroken.py

-=-
Modified: ZODB/trunk/src/CHANGES.txt
===================================================================
--- ZODB/trunk/src/CHANGES.txt	2010-01-08 15:29:48 UTC (rev 107798)
+++ ZODB/trunk/src/CHANGES.txt	2010-01-08 15:29:50 UTC (rev 107799)
@@ -5,6 +5,11 @@
 3.10.0a1 (2009-12-??)
 =====================
 
+New Features
+------------
+
+- Broken objects now provide the IBroken interface.
+
 Bugs Fixed
 ----------
 

Modified: ZODB/trunk/src/ZODB/broken.py
===================================================================
--- ZODB/trunk/src/ZODB/broken.py	2010-01-08 15:29:48 UTC (rev 107798)
+++ ZODB/trunk/src/ZODB/broken.py	2010-01-08 15:29:50 UTC (rev 107799)
@@ -19,6 +19,10 @@
 import sys
 import persistent
 
+import zope.interface
+
+import ZODB.interfaces
+
 broken_cache = {}
 
 class Broken(object):
@@ -92,6 +96,8 @@
          >>> broken_cache.clear()
        """
 
+    zope.interface.implements(ZODB.interfaces.IBroken)
+
     __Broken_state__ = __Broken_initargs__ = None
 
     __name__ = 'broken object'

Modified: ZODB/trunk/src/ZODB/interfaces.py
===================================================================
--- ZODB/trunk/src/ZODB/interfaces.py	2010-01-08 15:29:48 UTC (rev 107798)
+++ ZODB/trunk/src/ZODB/interfaces.py	2010-01-08 15:29:50 UTC (rev 107799)
@@ -1217,6 +1217,32 @@
         """
 
 
+class IBroken(Interface):
+    """Broken objects are placeholders for objects that can no longer be
+    created because their class has gone away.
+
+    They cannot be modified, but they retain their state. This allows them to
+    be rebuild should the missing class be found again.
+
+    A broken object's __class__ can be used to determine the original
+    class' name (__name__) and module (__module__).
+
+    The original object's state and initialization arguments are
+    available in broken object attributes to aid analysis and
+    reconstruction.
+
+    """
+
+    def __setattr__(name, value):
+        """You cannot modify broken objects. This will raise a
+        ZODB.broken.BrokenModified exception.
+        """
+
+    __Broken_newargs__ = Attribute("Arguments passed to __new__.")
+    __Broken_initargs__ = Attribute("Arguments passed to __init__.")
+    __Broken_state__ = Attribute("Value passed to __setstate__.")
+
+
 class BlobError(Exception):
     pass
 

Modified: ZODB/trunk/src/ZODB/tests/testBroken.py
===================================================================
--- ZODB/trunk/src/ZODB/tests/testBroken.py	2010-01-08 15:29:48 UTC (rev 107798)
+++ ZODB/trunk/src/ZODB/tests/testBroken.py	2010-01-08 15:29:50 UTC (rev 107799)
@@ -71,6 +71,12 @@
     >>> a3.__Broken_state__
     {'x': 1}
 
+    Broken objects provide an interface:
+
+    >>> from ZODB.interfaces import IBroken
+    >>> IBroken.providedBy(a3)
+    True
+
     Let's clean up:
 
     >>> db.close()
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.