mirror of
https://github.com/msgpack/msgpack-python.git
synced 2025-11-03 02:50:55 +00:00
Support packing subclass of dict.
This commit is contained in:
parent
5b66edaa15
commit
4d643894a1
3 changed files with 50 additions and 3 deletions
|
|
@ -1,3 +1,14 @@
|
|||
0.2.3
|
||||
=======
|
||||
:release date: in development
|
||||
|
||||
Changes
|
||||
-------
|
||||
|
||||
Bugs fixed
|
||||
-----------
|
||||
* Can't pack subclass of dict.
|
||||
|
||||
0.2.2
|
||||
=======
|
||||
:release date: 2012-09-21
|
||||
|
|
|
|||
|
|
@ -139,7 +139,7 @@ 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:
|
||||
|
|
@ -148,6 +148,14 @@ cdef class Packer(object):
|
|||
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)
|
||||
if ret != 0: break
|
||||
elif PyTuple_Check(o) or PyList_Check(o):
|
||||
ret = msgpack_pack_array(&self.pk, len(o))
|
||||
if ret == 0:
|
||||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -91,5 +91,31 @@ def testPackFloat():
|
|||
assert_equal(packb(1.0, use_single_float=True), b'\xca' + struct.pack('>f', 1.0))
|
||||
assert_equal(packb(1.0, use_single_float=False), b'\xcb' + struct.pack('>d', 1.0))
|
||||
|
||||
|
||||
class odict(dict):
|
||||
'''Reimplement OrderedDict to run test on Python 2.6'''
|
||||
def __init__(self, seq):
|
||||
self._seq = seq
|
||||
dict.__init__(self, seq)
|
||||
|
||||
def items(self):
|
||||
return self._seq[:]
|
||||
|
||||
def iteritems(self):
|
||||
return iter(self._seq)
|
||||
|
||||
def keys(self):
|
||||
return [x[0] for x in self._seq]
|
||||
|
||||
def test_odict():
|
||||
seq = [(b'one', 1), (b'two', 2), (b'three', 3), (b'four', 4)]
|
||||
od = odict(seq)
|
||||
assert_equal(unpackb(packb(od)), dict(seq))
|
||||
# After object_pairs_hook is implemented.
|
||||
#def pair_hook(seq):
|
||||
# return seq
|
||||
#assert_equal(unpackb(packb(od), object_pairs_hook=pair_hook), seq)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue