mirror of
https://github.com/msgpack/msgpack-c.git
synced 2025-03-24 09:32:49 +01:00
python: Support Python3.
This commit is contained in:
parent
be6376ee2d
commit
4a15d8b6d2
python/msgpack
@ -1,3 +1,3 @@
|
|||||||
# coding: utf-8
|
# coding: utf-8
|
||||||
from _msgpack import *
|
from msgpack._msgpack import *
|
||||||
|
|
||||||
|
@ -1,26 +1,24 @@
|
|||||||
# coding: utf-8
|
# coding: utf-8
|
||||||
|
|
||||||
import cStringIO
|
|
||||||
|
|
||||||
cdef extern from "Python.h":
|
cdef extern from "Python.h":
|
||||||
ctypedef char* const_char_ptr "const char*"
|
ctypedef char* const_char_ptr "const char*"
|
||||||
ctypedef struct PyObject
|
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_True
|
||||||
cdef PyObject* Py_False
|
cdef PyObject* Py_False
|
||||||
|
|
||||||
cdef char* PyString_AsString(object o)
|
|
||||||
cdef long long PyLong_AsLongLong(object o)
|
cdef long long PyLong_AsLongLong(object o)
|
||||||
cdef unsigned long long PyLong_AsUnsignedLongLong(object o)
|
cdef unsigned long long PyLong_AsUnsignedLongLong(object o)
|
||||||
|
|
||||||
cdef int PyMapping_Check(object o)
|
cdef bint PyBool_Check(object o)
|
||||||
cdef int PySequence_Check(object o)
|
cdef bint PyMapping_Check(object o)
|
||||||
cdef int PyLong_Check(object o)
|
cdef bint PySequence_Check(object o)
|
||||||
cdef int PyInt_Check(object o)
|
cdef bint PyLong_Check(object o)
|
||||||
cdef int PyFloat_Check(object o)
|
cdef bint PyInt_Check(object o)
|
||||||
cdef int PyString_Check(object o)
|
cdef bint PyFloat_Check(object o)
|
||||||
cdef int PyUnicode_Check(object o)
|
cdef bint PyBytes_Check(object o)
|
||||||
|
cdef bint PyUnicode_Check(object o)
|
||||||
|
|
||||||
cdef extern from "stdlib.h":
|
cdef extern from "stdlib.h":
|
||||||
void* malloc(size_t)
|
void* malloc(size_t)
|
||||||
@ -81,10 +79,12 @@ cdef class Packer(object):
|
|||||||
|
|
||||||
if o is None:
|
if o is None:
|
||||||
ret = msgpack_pack_nil(&self.pk)
|
ret = msgpack_pack_nil(&self.pk)
|
||||||
elif <PyObject*>o == Py_True:
|
#elif PyBool_Check(o):
|
||||||
ret = msgpack_pack_true(&self.pk)
|
elif isinstance(o, bool):
|
||||||
elif <PyObject*>o == Py_False:
|
if o:
|
||||||
ret = msgpack_pack_false(&self.pk)
|
ret = msgpack_pack_true(&self.pk)
|
||||||
|
else:
|
||||||
|
ret = msgpack_pack_false(&self.pk)
|
||||||
elif PyLong_Check(o):
|
elif PyLong_Check(o):
|
||||||
if o > 0:
|
if o > 0:
|
||||||
ullval = PyLong_AsUnsignedLongLong(o)
|
ullval = PyLong_AsUnsignedLongLong(o)
|
||||||
@ -98,7 +98,7 @@ cdef class Packer(object):
|
|||||||
elif PyFloat_Check(o):
|
elif PyFloat_Check(o):
|
||||||
fval = o
|
fval = o
|
||||||
ret = msgpack_pack_double(&self.pk, fval)
|
ret = msgpack_pack_double(&self.pk, fval)
|
||||||
elif PyString_Check(o):
|
elif PyBytes_Check(o):
|
||||||
rawval = o
|
rawval = o
|
||||||
ret = msgpack_pack_raw(&self.pk, len(o))
|
ret = msgpack_pack_raw(&self.pk, len(o))
|
||||||
if ret == 0:
|
if ret == 0:
|
||||||
@ -133,7 +133,7 @@ cdef class Packer(object):
|
|||||||
ret = self.__pack(obj)
|
ret = self.__pack(obj)
|
||||||
if ret:
|
if ret:
|
||||||
raise TypeError
|
raise TypeError
|
||||||
buf = PyString_FromStringAndSize(self.pk.buf, self.pk.length)
|
buf = PyBytes_FromStringAndSize(self.pk.buf, self.pk.length)
|
||||||
self.pk.length = 0
|
self.pk.length = 0
|
||||||
return buf
|
return buf
|
||||||
|
|
||||||
@ -262,10 +262,11 @@ cdef class Unpacker(object):
|
|||||||
cdef char* buf = self.buf
|
cdef char* buf = self.buf
|
||||||
cdef Py_ssize_t tail = self.buf_tail
|
cdef Py_ssize_t tail = self.buf_tail
|
||||||
cdef Py_ssize_t l
|
cdef Py_ssize_t l
|
||||||
|
cdef bytes b
|
||||||
|
|
||||||
for b in self.waiting_bytes:
|
for b in self.waiting_bytes:
|
||||||
l = len(b)
|
l = len(b)
|
||||||
memcpy(buf + tail, PyString_AsString(b), l)
|
memcpy(buf + tail, <char*>(b), l)
|
||||||
tail += l
|
tail += l
|
||||||
self.buf_tail = tail
|
self.buf_tail = tail
|
||||||
del self.waiting_bytes[:]
|
del self.waiting_bytes[:]
|
||||||
|
@ -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)
|
static inline int template_callback_raw(unpack_user* u, const char* b, const char* p, unsigned int l, msgpack_unpack_object* o)
|
||||||
{
|
{
|
||||||
PyObject *py;
|
PyObject *py;
|
||||||
py = PyString_FromStringAndSize(p, l);
|
py = PyBytes_FromStringAndSize(p, l);
|
||||||
if (!py)
|
if (!py)
|
||||||
return -1;
|
return -1;
|
||||||
*o = py;
|
*o = py;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user