diff options
author | INADA Naoki <inada-n@klab.com> | 2012-09-23 02:13:32 +0900 |
---|---|---|
committer | INADA Naoki <inada-n@klab.com> | 2012-09-23 02:13:32 +0900 |
commit | 4d643894a1ab02b0836245b8a456200cac5ae314 (patch) | |
tree | 0d87a61644b61a5d6e9b5313e82e2093d5bd07e7 /msgpack/_msgpack.pyx | |
parent | 5b66edaa156c43793b6f68013a738f545885b8d6 (diff) | |
download | msgpack-python-4d643894a1ab02b0836245b8a456200cac5ae314.tar.gz |
Support packing subclass of dict.
Diffstat (limited to 'msgpack/_msgpack.pyx')
-rw-r--r-- | msgpack/_msgpack.pyx | 16 |
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: |