Remove 2.6 compatibility code:
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.
This commit is contained in:
parent
35c8658a74
commit
2ba198d2fb
|
@ -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)
|
||||
|
||||
|
||||
#==============================================================================
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue