1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
|
Description: Changes needed for Python3
Author: Alastair McKinstry <mckinstry@debian.org>
Last-Updated: 2018-07-02
Forwarded: no
Index: odb-api-0.18.0/odb_api/src/odb_api/IteratorProxy.h
===================================================================
--- odb-api-0.18.0.orig/odb_api/src/odb_api/IteratorProxy.h
+++ odb-api-0.18.0/odb_api/src/odb_api/IteratorProxy.h
@@ -189,7 +189,7 @@ public:
size_t j = 0;
for (; j < sizeof(double) && s[j]; ++j)
;
- return PyString_FromStringAndSize(s, j);
+ return PyUnicode_FromStringAndSize(s, j);
}
case INTEGER: return PyLong_FromDouble(d);
case BITFIELD:
@@ -207,7 +207,7 @@ public:
mask >>= 1;
}
buf[sizeof(B)] = 0;
- return PyString_FromStringAndSize(buf, sizeof(B) + 1);
+ return PyUnicode_FromStringAndSize(buf, sizeof(B) + 1);
}
default: return PyFloat_FromDouble(d);
}
@@ -238,27 +238,36 @@ public:
}
return l;
}
- if (PyString_Check(i))
+ if (PyUnicode_Check(i))
{
//cerr << "__getitem__: start: PyString " << PyString_AsString(PyObject_Repr(i)) << std::endl;
- return getitem(PyString_AsString(i));
+ return PyUnicode_AsUTF8String(i);
}
if (PySlice_Check(i))
{
//cerr << "__getitem__: we've got a PySliceObject here: ";
- return getslice((PySliceObject*) i);
+ return getslice(i);
}
long li = PyLong_AsLong(i);
return getitem(li);
}
- PyObject* getslice(PySliceObject* slice)
+ PyObject* getslice(PyObject* slice)
{
//cerr << "__getslice__(PySliceObject*):" << std::endl;
+ PySliceObject *sl;
Py_ssize_t start = 0, stop = 0, step = 0, slicelength = 0;
- PySlice_GetIndicesEx(slice, __len__(), &start, &stop, &step, &slicelength);
-
+
+#ifdef Py_LIMITED_API
+ if (PySlice_Unpack(slice, start, stop, step) < 0)
+ slicelen = 0;
+ else
+ slicelen = PySlice_AdjustIndices(__len__(), *start, *stop, step);
+#else
+ sl = (PySliceObject *) slice;
+ PySlice_GetIndicesEx(slice, __len__(), &start, &stop, &step, &slicelength);
+#endif
return getslice(start, stop, step, slicelength);
}
|