[Zope3-checkins] CVS: Zope/lib/python/ZODB - Connection.py:1.124

Jeremy Hylton jeremy at zope.com
Wed Feb 25 14:09:15 EST 2004


Update of /cvs-repository/Zope/lib/python/ZODB
In directory cvs.zope.org:/tmp/cvs-serv13442

Modified Files:
	Connection.py 
Log Message:
Add deprecation warning for register() call with _p_oid is None.


=== Zope/lib/python/ZODB/Connection.py 1.123 => 1.124 ===
--- Zope/lib/python/ZODB/Connection.py:1.123	Wed Feb 25 06:30:16 2004
+++ Zope/lib/python/ZODB/Connection.py	Wed Feb 25 14:09:14 2004
@@ -19,6 +19,7 @@
 import sys
 import threading
 import itertools
+import warnings
 from time import time
 from utils import u64
 
@@ -84,6 +85,9 @@
     connection or the transaction the connection is registered with,
     the application should provide locking.
 
+    The Connection manages movement of objects in and out of object
+    storage.
+
     XXX We should document an intended API for using a Connection via
     multiple threads.
 
@@ -210,6 +214,7 @@
             raise TypeError("Only first-class persistent objects may be"
                             " added to a Connection.", obj)
         elif obj._p_jar is None:
+            assert obj._p_oid is None
             oid = obj._p_oid = self._storage.new_oid()
             obj._p_jar = self
             self._added[oid] = obj
@@ -496,8 +501,17 @@
         policy of one transaction manager for each thread.
         """
         assert object._p_jar is self
-        # XXX Figure out why this assert causes test failures
-        #assert object._p_oid is not None
+        if object._p_oid is not None:
+            # There is some old Zope code that assigns _p_jar
+            # directly.  That is no longer allowed, but we need to
+            # provide support for old code that still does it.
+            
+            # XXX The actual complaint here is that an object without
+            # an oid is being registered.  I can't think of any way to
+            # achieve that without assignment to _p_jar.  If there is
+            # a way, this will be a very confusing warning.
+            warnings.warn("Assigning to _p_jar is deprecated",
+                          PendingDeprecationWarning)
         self.getTransaction().register(object)
 
     def root(self):




More information about the Zope3-Checkins mailing list