[Checkins] SVN: ZODB/branches/3.10/src/ rolled back BTree sanity warning for later release

Jim Fulton jim at zope.com
Wed Oct 27 15:17:40 EDT 2010


Log message for revision 117967:
  rolled back BTree sanity warning for later release

Changed:
  U   ZODB/branches/3.10/src/BTrees/BTreeModuleTemplate.c
  U   ZODB/branches/3.10/src/BTrees/objectkeymacros.h
  U   ZODB/branches/3.10/src/BTrees/tests/testBTrees.py
  U   ZODB/branches/3.10/src/CHANGES.txt
  U   ZODB/branches/3.10/src/ZODB/ConflictResolution.txt

-=-
Modified: ZODB/branches/3.10/src/BTrees/BTreeModuleTemplate.c
===================================================================
--- ZODB/branches/3.10/src/BTrees/BTreeModuleTemplate.c	2010-10-27 18:09:26 UTC (rev 117966)
+++ ZODB/branches/3.10/src/BTrees/BTreeModuleTemplate.c	2010-10-27 19:17:39 UTC (rev 117967)
@@ -465,12 +465,6 @@
 {
     PyObject *m, *d, *c;
 
-#ifdef KEY_TYPE_IS_PYOBJECT
-    object_ = PyTuple_GetItem(Py_None->ob_type->tp_bases, 0);
-    if (object_ == NULL)
-      return;
-#endif
-
     sort_str = PyString_InternFromString("sort");
     if (!sort_str)
 	return;

Modified: ZODB/branches/3.10/src/BTrees/objectkeymacros.h
===================================================================
--- ZODB/branches/3.10/src/BTrees/objectkeymacros.h	2010-10-27 18:09:26 UTC (rev 117966)
+++ ZODB/branches/3.10/src/BTrees/objectkeymacros.h	2010-10-27 19:17:39 UTC (rev 117967)
@@ -1,33 +1,9 @@
 #define KEYMACROS_H "$Id$\n"
 #define KEY_TYPE PyObject *
 #define KEY_TYPE_IS_PYOBJECT
-
-#include "Python.h"
-
-static PyObject *object_;
-
-static int
-check_argument_cmp(PyObject *arg)
-{
-  if (arg->ob_type->tp_richcompare == NULL
-      &&
-      arg->ob_type->tp_compare ==
-      ((PyTypeObject *)object_)->ob_type->tp_compare
-      )
-    {
-      return PyErr_WarnEx(
-         PyExc_UserWarning,
-         "Object has default comparison! This will error in 3.11",
-         1) >= 0;
-    }
-  return 1;
-}
-
 #define TEST_KEY_SET_OR(V, KEY, TARGET) if ( ( (V) = PyObject_Compare((KEY),(TARGET)) ), PyErr_Occurred() )
 #define INCREF_KEY(k) Py_INCREF(k)
 #define DECREF_KEY(KEY) Py_DECREF(KEY)
 #define COPY_KEY(KEY, E) KEY=(E)
 #define COPY_KEY_TO_OBJECT(O, K) O=(K); Py_INCREF(O)
-#define COPY_KEY_FROM_ARG(TARGET, ARG, S) \
-    TARGET=(ARG); \
-    (S) = check_argument_cmp(ARG); 
+#define COPY_KEY_FROM_ARG(TARGET, ARG, S) TARGET=(ARG)

Modified: ZODB/branches/3.10/src/BTrees/tests/testBTrees.py
===================================================================
--- ZODB/branches/3.10/src/BTrees/tests/testBTrees.py	2010-10-27 18:09:26 UTC (rev 117966)
+++ ZODB/branches/3.10/src/BTrees/tests/testBTrees.py	2010-10-27 19:17:39 UTC (rev 117967)
@@ -15,7 +15,6 @@
 import pickle
 import random
 import StringIO
-import sys
 from unittest import TestCase, TestSuite, TextTestRunner, makeSuite
 from types import ClassType
 import zope.interface.verify
@@ -1885,55 +1884,6 @@
     def setUp(self):
         self.t = OOBTree()
 
-    def testRejectDefaultComparison(self):
-        # Check that passing int keys w default comparison fails.
-        # Only applies to new-style class instances. Old-style
-        # instances are too hard to introspect.
-
-        # This is white box because we know that the check is being
-        # used in a function that's used in lots of places.
-        # Otherwise, there are many permutations that would have to be
-        # checked.
-
-        import warnings
-
-        class C(object):
-            pass
-
-        with warnings.catch_warnings(record=True) as w:
-            # Cause all warnings to always be triggered.
-            warnings.simplefilter("always")
-
-            self.t[C()] = 1
-
-            # Verify some things
-            n = len(w) # somewhat unpredictable #
-
-            for m in w:
-                self.assertEqual(m.category, UserWarning)
-                self.assert_("Object has default comparison" in str(m.message))
-
-            self.t.clear()
-
-            class C(object):
-                def __cmp__(*args):
-                    return 1
-
-            self.t[C()] = 1
-            self.t.clear()
-
-            class C(object):
-                def __lt__(*args):
-                    return 1
-
-            self.t[C()] = 1
-            self.t.clear()
-
-            self.assertEqual(len(w), n)
-
-    if sys.version_info[:2] < (2, 6):
-        del testRejectDefaultComparison
-
 if using64bits:
     class IIBTreeTest(BTreeTests, TestLongIntKeys, TestLongIntValues):
         def setUp(self):
@@ -1972,6 +1922,9 @@
         self.t = OLBTree()
     def getTwoKeys(self):
         return object(), object()
+class OOBTreeTest(BTreeTests):
+    def setUp(self):
+        self.t = OOBTree()
 
 
 # cmp error propagation tests

Modified: ZODB/branches/3.10/src/CHANGES.txt
===================================================================
--- ZODB/branches/3.10/src/CHANGES.txt	2010-10-27 18:09:26 UTC (rev 117966)
+++ ZODB/branches/3.10/src/CHANGES.txt	2010-10-27 19:17:39 UTC (rev 117967)
@@ -2,7 +2,7 @@
  Change History
 ================
 
-3.10.1 (2010-10-27)
+3.10.1 (2010-10-??)
 ===================
 
 Bugs Fixed
@@ -28,12 +28,6 @@
   don't send invalidations. There's no reason to send them when an
   external garbage collector is used.
 
-- BTrees allowed object keys with insane comparison. (Comparison
-  inherited from object, which compares based on in-process address.)
-  Now BTrees warn if an attempt is made to save a key with
-  comparison inherited from object. (This doesn't apply to old-style
-  class instances.) This will become an error in ZODB 3.11.
-
 - ZEO client cache simulation misshandled invalidations
   causing incorrect statistics and errors.
 

Modified: ZODB/branches/3.10/src/ZODB/ConflictResolution.txt
===================================================================
--- ZODB/branches/3.10/src/ZODB/ConflictResolution.txt	2010-10-27 18:09:26 UTC (rev 117966)
+++ ZODB/branches/3.10/src/ZODB/ConflictResolution.txt	2010-10-27 19:17:39 UTC (rev 117967)
@@ -65,11 +65,6 @@
             from persistent import Persistent
             class PCounter(Persistent):
                 '`value` is readonly; increment it with `inc`.'
-
-                def __cmp__(self, other):
-                    'Fool BTree checks for sane comparison :/'
-                    return object.__cmp__(self, other)
-
                 _val = 0
                 def inc(self):
                     self._val += 1



More information about the checkins mailing list