mirror of
https://github.com/msgpack/msgpack-c.git
synced 2025-10-30 13:47:12 +01:00
python: Add test for python3 and fix found problems.
This commit is contained in:
@@ -12,7 +12,7 @@ cdef extern from "Python.h":
|
||||
cdef unsigned long long PyLong_AsUnsignedLongLong(object o)
|
||||
|
||||
cdef bint PyBool_Check(object o)
|
||||
cdef bint PyMapping_Check(object o)
|
||||
cdef bint PyDict_Check(object o)
|
||||
cdef bint PySequence_Check(object o)
|
||||
cdef bint PyLong_Check(object o)
|
||||
cdef bint PyInt_Check(object o)
|
||||
@@ -69,13 +69,14 @@ cdef class Packer(object):
|
||||
def __dealloc__(self):
|
||||
free(self.pk.buf);
|
||||
|
||||
cdef int __pack(self, object o) except -1:
|
||||
cdef int _pack(self, object o) except -1:
|
||||
cdef long long llval
|
||||
cdef unsigned long long ullval
|
||||
cdef long longval
|
||||
cdef double fval
|
||||
cdef char* rawval
|
||||
cdef int ret
|
||||
cdef dict d
|
||||
|
||||
if o is None:
|
||||
ret = msgpack_pack_nil(&self.pk)
|
||||
@@ -109,19 +110,20 @@ cdef class Packer(object):
|
||||
ret = msgpack_pack_raw(&self.pk, len(o))
|
||||
if ret == 0:
|
||||
ret = msgpack_pack_raw_body(&self.pk, rawval, len(o))
|
||||
elif PyMapping_Check(o):
|
||||
ret = msgpack_pack_map(&self.pk, len(o))
|
||||
elif PyDict_Check(o):
|
||||
d = o
|
||||
ret = msgpack_pack_map(&self.pk, len(d))
|
||||
if ret == 0:
|
||||
for k,v in o.iteritems():
|
||||
ret = self.__pack(k)
|
||||
for k,v in d.items():
|
||||
ret = self._pack(k)
|
||||
if ret != 0: break
|
||||
ret = self.__pack(v)
|
||||
ret = self._pack(v)
|
||||
if ret != 0: break
|
||||
elif PySequence_Check(o):
|
||||
ret = msgpack_pack_array(&self.pk, len(o))
|
||||
if ret == 0:
|
||||
for v in o:
|
||||
ret = self.__pack(v)
|
||||
ret = self._pack(v)
|
||||
if ret != 0: break
|
||||
else:
|
||||
# TODO: Serialize with defalt() like simplejson.
|
||||
@@ -130,7 +132,7 @@ cdef class Packer(object):
|
||||
|
||||
def pack(self, object obj):
|
||||
cdef int ret
|
||||
ret = self.__pack(obj)
|
||||
ret = self._pack(obj)
|
||||
if ret:
|
||||
raise TypeError
|
||||
buf = PyBytes_FromStringAndSize(self.pk.buf, self.pk.length)
|
||||
|
||||
Reference in New Issue
Block a user