python: Support Python3.

This commit is contained in:
INADA Naoki 2010-09-02 01:29:57 +09:00
parent be6376ee2d
commit 4a15d8b6d2
3 changed files with 21 additions and 20 deletions

View File

@ -1,3 +1,3 @@
# coding: utf-8
from _msgpack import *
from msgpack._msgpack import *

View File

@ -1,26 +1,24 @@
# coding: utf-8
import cStringIO
cdef extern from "Python.h":
ctypedef char* const_char_ptr "const char*"
ctypedef struct PyObject
cdef object PyString_FromStringAndSize(const_char_ptr b, Py_ssize_t len)
cdef object PyBytes_FromStringAndSize(const_char_ptr b, Py_ssize_t len)
cdef PyObject* Py_True
cdef PyObject* Py_False
cdef char* PyString_AsString(object o)
cdef long long PyLong_AsLongLong(object o)
cdef unsigned long long PyLong_AsUnsignedLongLong(object o)
cdef int PyMapping_Check(object o)
cdef int PySequence_Check(object o)
cdef int PyLong_Check(object o)
cdef int PyInt_Check(object o)
cdef int PyFloat_Check(object o)
cdef int PyString_Check(object o)
cdef int PyUnicode_Check(object o)
cdef bint PyBool_Check(object o)
cdef bint PyMapping_Check(object o)
cdef bint PySequence_Check(object o)
cdef bint PyLong_Check(object o)
cdef bint PyInt_Check(object o)
cdef bint PyFloat_Check(object o)
cdef bint PyBytes_Check(object o)
cdef bint PyUnicode_Check(object o)
cdef extern from "stdlib.h":
void* malloc(size_t)
@ -81,10 +79,12 @@ cdef class Packer(object):
if o is None:
ret = msgpack_pack_nil(&self.pk)
elif <PyObject*>o == Py_True:
ret = msgpack_pack_true(&self.pk)
elif <PyObject*>o == Py_False:
ret = msgpack_pack_false(&self.pk)
#elif PyBool_Check(o):
elif isinstance(o, bool):
if o:
ret = msgpack_pack_true(&self.pk)
else:
ret = msgpack_pack_false(&self.pk)
elif PyLong_Check(o):
if o > 0:
ullval = PyLong_AsUnsignedLongLong(o)
@ -98,7 +98,7 @@ cdef class Packer(object):
elif PyFloat_Check(o):
fval = o
ret = msgpack_pack_double(&self.pk, fval)
elif PyString_Check(o):
elif PyBytes_Check(o):
rawval = o
ret = msgpack_pack_raw(&self.pk, len(o))
if ret == 0:
@ -133,7 +133,7 @@ cdef class Packer(object):
ret = self.__pack(obj)
if ret:
raise TypeError
buf = PyString_FromStringAndSize(self.pk.buf, self.pk.length)
buf = PyBytes_FromStringAndSize(self.pk.buf, self.pk.length)
self.pk.length = 0
return buf
@ -262,10 +262,11 @@ cdef class Unpacker(object):
cdef char* buf = self.buf
cdef Py_ssize_t tail = self.buf_tail
cdef Py_ssize_t l
cdef bytes b
for b in self.waiting_bytes:
l = len(b)
memcpy(buf + tail, PyString_AsString(b), l)
memcpy(buf + tail, <char*>(b), l)
tail += l
self.buf_tail = tail
del self.waiting_bytes[:]

View File

@ -175,7 +175,7 @@ static inline int template_callback_map_item(unpack_user* u, msgpack_unpack_obje
static inline int template_callback_raw(unpack_user* u, const char* b, const char* p, unsigned int l, msgpack_unpack_object* o)
{
PyObject *py;
py = PyString_FromStringAndSize(p, l);
py = PyBytes_FromStringAndSize(p, l);
if (!py)
return -1;
*o = py;