Remove 2.6 compatibility code:
authorAmaury Forgeot d'Arc <amauryfa@gmail.com>
Tue, 17 Jun 2008 21:25:35 +0000 (21:25 +0000)
committerAmaury Forgeot d'Arc <amauryfa@gmail.com>
Tue, 17 Jun 2008 21:25:35 +0000 (21:25 +0000)
now heapqueue items must implement the "<" operator.

The compatibility code could not work: all 3.0 objects have a __lt__ method
(which returns NotImplemented)

Twisted will have to adapt its DelayedCall class.

Lib/test/test_heapq.py
Modules/_heapqmodule.c

index fba4fd71f855033772730baca995c60344d6b614..484ab4828874985d9e014ca2e0aa0e64e90b71c7 100644 (file)
@@ -198,7 +198,8 @@ class TestHeapC(TestHeap):
     module = c_heapq
 
     def test_comparison_operator(self):
-        # Issue 3501: Make sure heapq works with both __lt__ and __le__
+        # Issue 3501: Make sure heapq works with both __lt__
+        # For python 3.0, __le__ alone is not enough
         def hsort(data, comp):
             data = [comp(x) for x in data]
             self.module.heapify(data)
@@ -215,9 +216,8 @@ class TestHeapC(TestHeap):
                 return self.x >= other.x
         data = [random.random() for i in range(100)]
         target = sorted(data, reverse=True)
-        print("HASATTR", hasattr(LE(0), "__lt__"), LE(0).__lt__)
         self.assertEqual(hsort(data, LT), target)
-        self.assertEqual(hsort(data, LE), target)
+        self.assertRaises(TypeError, data, LE)
 
 
 #==============================================================================
index 4cf6c95bb811e73489e8e322a5faf33c42a6b2b9..7921823696f177e7a853d423321cb58af2d75ae8 100644 (file)
@@ -8,28 +8,10 @@ annotated by Fran
 
 #include "Python.h"
 
-/* Older implementations of heapq used Py_LE for comparisons.  Now, it uses
-   Py_LT so it will match min(), sorted(), and bisect().  Unfortunately, some
-   client code (Twisted for example) relied on Py_LE, so this little function
-   restores compatability by trying both.
-*/
 static int
 cmp_lt(PyObject *x, PyObject *y)
 {
-       int cmp;
-       static PyObject *lt = NULL;
-
-       if (lt == NULL) {
-               lt = PyUnicode_FromString("__lt__");
-               if (lt == NULL)
-                       return -1;
-       }
-       if (PyObject_HasAttr(x, lt))
-               return PyObject_RichCompareBool(x, y, Py_LT);
-       cmp = PyObject_RichCompareBool(y, x, Py_LE);
-       if (cmp != -1)
-               cmp = 1 - cmp;
-       return cmp;
+       return PyObject_RichCompareBool(x, y, Py_LT);
 }
 
 static int