summaryrefslogtreecommitdiff
path: root/msgpack/_msgpack.pyx
diff options
context:
space:
mode:
authorINADA Naoki <inada-n@klab.com>2012-09-23 02:13:32 +0900
committerINADA Naoki <inada-n@klab.com>2012-09-23 02:13:32 +0900
commit4d643894a1ab02b0836245b8a456200cac5ae314 (patch)
tree0d87a61644b61a5d6e9b5313e82e2093d5bd07e7 /msgpack/_msgpack.pyx
parent5b66edaa156c43793b6f68013a738f545885b8d6 (diff)
downloadmsgpack-python-4d643894a1ab02b0836245b8a456200cac5ae314.tar.gz
Support packing subclass of dict.
Diffstat (limited to 'msgpack/_msgpack.pyx')
-rw-r--r--msgpack/_msgpack.pyx16
1 files changed, 13 insertions, 3 deletions
diff --git a/msgpack/_msgpack.pyx b/msgpack/_msgpack.pyx
index c9f5e31..976871e 100644
--- a/msgpack/_msgpack.pyx
+++ b/msgpack/_msgpack.pyx
@@ -139,11 +139,19 @@ 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 PyDict_Check(o):
+ elif PyDict_CheckExact(o):
d = <dict>o
ret = msgpack_pack_map(&self.pk, len(d))
if ret == 0:
- for k,v in d.iteritems():
+ for k, v in d.iteritems():
+ ret = self._pack(k, nest_limit-1)
+ if ret != 0: break
+ ret = self._pack(v, nest_limit-1)
+ if ret != 0: break
+ elif PyDict_Check(o):
+ ret = msgpack_pack_map(&self.pk, len(o))
+ if ret == 0:
+ for k, v in o.items():
ret = self._pack(k, nest_limit-1)
if ret != 0: break
ret = self._pack(v, nest_limit-1)
@@ -332,7 +340,9 @@ cdef class Unpacker(object):
def __init__(self, file_like=None, Py_ssize_t read_size=0, bint use_list=0,
object object_hook=None, object list_hook=None,
- encoding=None, unicode_errors='strict', int max_buffer_size=0):
+ encoding=None, unicode_errors='strict', int max_buffer_size=0,
+ object object_pairs_hook=None,
+ ):
self.use_list = use_list
self.file_like = file_like
if file_like: