[Zope-Checkins] CVS: Zope2 - POSException.py:1.7

Jim Fulton jim@digicool.com
Thu, 12 Apr 2001 16:47:00 -0400 (EDT)


Update of /cvs-repository/Zope2/lib/python/ZODB
In directory korak:/tmp/cvs-serv32217

Modified Files:
	POSException.py 
Log Message:
Provided specialised string representations for UndoErrors.



--- Updated File POSException.py in package Zope2/lib/python/ZODB --
--- POSException.py	2001/02/08 22:25:59	1.6
+++ POSException.py	2001/04/12 20:47:00	1.7
@@ -87,6 +87,9 @@
 $Id$'''
 __version__='$Revision$'[11:-2]
 
+from string import join
+StringType=type('')
+DictType=type({})
 
 class POSError(Exception):
     """Persistent object system error
@@ -117,6 +120,26 @@
 class UndoError(POSError):
     """An attempt was made to undo a non-undoable transaction.
     """
+    def __init__(self, *reason):
+        if len(reason) == 1: reason=reason[0]
+        self.__reason=reason
+
+    def __repr__(self):
+        reason=self.__reason
+        if type(reason) is not DictType:
+            if reason: return str(reason)
+            return "non-undoable transaction"
+        r=[]
+        for oid, reason in reason.items():
+            if reason:
+                r.append("Couldn't undo change to %s because %s"
+                         % (`oid`, reason))
+            else:
+                r.append("Couldn't undo change to %s" % (`oid`))
+
+        return join(r,'\n')
+
+    __str__=__repr__
 
 class StorageError(POSError):
     pass



--- Updated File POSException.py in package Zope2 --
--- POSException.py	2001/02/08 22:25:59	1.6
+++ POSException.py	2001/04/12 20:47:00	1.7
@@ -87,6 +87,9 @@
 $Id$'''
 __version__='$Revision$'[11:-2]
 
+from string import join
+StringType=type('')
+DictType=type({})
 
 class POSError(Exception):
     """Persistent object system error
@@ -117,6 +120,26 @@
 class UndoError(POSError):
     """An attempt was made to undo a non-undoable transaction.
     """
+    def __init__(self, *reason):
+        if len(reason) == 1: reason=reason[0]
+        self.__reason=reason
+
+    def __repr__(self):
+        reason=self.__reason
+        if type(reason) is not DictType:
+            if reason: return str(reason)
+            return "non-undoable transaction"
+        r=[]
+        for oid, reason in reason.items():
+            if reason:
+                r.append("Couldn't undo change to %s because %s"
+                         % (`oid`, reason))
+            else:
+                r.append("Couldn't undo change to %s" % (`oid`))
+
+        return join(r,'\n')
+
+    __str__=__repr__
 
 class StorageError(POSError):
     pass