mirror of
https://github.com/msgpack/msgpack-python.git
synced 2025-11-03 19:10: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
|
0.2.2
|
||||||
=======
|
=======
|
||||||
:release date: 2012-09-21
|
:release date: 2012-09-21
|
||||||
|
|
|
||||||
|
|
@ -139,11 +139,19 @@ cdef class Packer(object):
|
||||||
ret = msgpack_pack_raw(&self.pk, len(o))
|
ret = msgpack_pack_raw(&self.pk, len(o))
|
||||||
if ret == 0:
|
if ret == 0:
|
||||||
ret = msgpack_pack_raw_body(&self.pk, rawval, len(o))
|
ret = msgpack_pack_raw_body(&self.pk, rawval, len(o))
|
||||||
elif PyDict_Check(o):
|
elif PyDict_CheckExact(o):
|
||||||
d = <dict>o
|
d = <dict>o
|
||||||
ret = msgpack_pack_map(&self.pk, len(d))
|
ret = msgpack_pack_map(&self.pk, len(d))
|
||||||
if ret == 0:
|
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)
|
ret = self._pack(k, nest_limit-1)
|
||||||
if ret != 0: break
|
if ret != 0: break
|
||||||
ret = self._pack(v, nest_limit-1)
|
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,
|
def __init__(self, file_like=None, Py_ssize_t read_size=0, bint use_list=0,
|
||||||
object object_hook=None, object list_hook=None,
|
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.use_list = use_list
|
||||||
self.file_like = file_like
|
self.file_like = file_like
|
||||||
if 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=True), b'\xca' + struct.pack('>f', 1.0))
|
||||||
assert_equal(packb(1.0, use_single_float=False), b'\xcb' + struct.pack('>d', 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__':
|
if __name__ == '__main__':
|
||||||
main()
|
main()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue