[Zope3-checkins] CVS: Zope3/src/zodb - conflict.py:1.6

Jeremy Hylton jeremy@zope.com
Wed, 15 Jan 2003 18:28:33 -0500


Update of /cvs-repository/Zope3/src/zodb
In directory cvs.zope.org:/tmp/cvs-serv6701/zodb

Modified Files:
	conflict.py 
Log Message:
Simplify conflict error handling.

Rename tryToResolveConflict() to resolveConflict().

Change its contract to raise ConflictError on failure instead of
returning None.  This reduces the name of places that ConflictError
is raised but slightly complicates code that wants to raise UndoError
instead.


=== Zope3/src/zodb/conflict.py 1.5 => 1.6 ===
--- Zope3/src/zodb/conflict.py:1.5	Wed Jan 15 14:07:22 2003
+++ Zope3/src/zodb/conflict.py	Wed Jan 15 18:28:00 2003
@@ -22,7 +22,7 @@
 from cPickle import PicklingError
 import logging
 
-from transaction.interfaces import ConflictError
+from zodb.interfaces import ConflictError
 from zodb.serialize import BaseObjectReader, ObjectWriter, getClassMetadata
 
 ResolvedSerial = "rs"
@@ -137,8 +137,23 @@
 class ConflictResolvingStorage:
     "Mix-in class that provides conflict resolution handling for storages"
 
-    def tryToResolveConflict(self, oid, committedSerial, oldSerial, newpickle,
-                             committedData=None):
+    def resolveConflict(self, oid, committedSerial, oldSerial, newpickle,
+                        committedData=None):
+        """Attempt to resolve conflict for object oid.
+
+        Raises ConflictError if the conflict can no be resolved.  If
+        the object oid defines an _p_resolveConflict() method, call it
+        to resolve the conflict.
+        """
+        r = self._resolve(oid, committedSerial, oldSerial, newpickle,
+                          committedData)
+        if r is None:
+            raise ConflictError(oid=oid,
+                                serials=(committedSerial, oldSerial))
+        return r
+
+    def _resolve(self, oid, committedSerial, oldSerial, newpickle,
+                 committedData):
         reader = ResolveObjectReader()
         resolve = reader.getResolver(newpickle)
         if resolve is None: