Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion msgpack/fallback.py
Original file line number Diff line number Diff line change
Expand Up @@ -795,7 +795,7 @@ def _pack(self, obj, nest_limit=DEFAULT_RECURSE_LIMIT,
obj = self._default(obj)
default_used = 1
continue
raise TypeError("Cannot serialize %r" % obj)
raise TypeError("Cannot serialize %r" % (obj, ))

def pack(self, obj):
self._pack(obj)
Expand Down
49 changes: 48 additions & 1 deletion test/test_stricttype.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# coding: utf-8

from collections import namedtuple
from msgpack import packb, unpackb
from msgpack import packb, unpackb, ExtType


def test_namedtuple():
Expand All @@ -13,3 +13,50 @@ def default(o):
packed = packb(T(1, 42), strict_types=True, use_bin_type=True, default=default)
unpacked = unpackb(packed, encoding='utf-8')
assert unpacked == {'foo': 1, 'bar': 42}


def test_tuple():
t = ('one', 2, b'three', (4, ))

def default(o):
if isinstance(o, tuple):
return {
'__type__': 'tuple',
'value': list(o),
}
raise TypeError('Unsupported type %s' % (type(o),))

def convert(o):
if o.get('__type__') == 'tuple':
return tuple(o['value'])
return o

data = packb(t, strict_types=True, use_bin_type=True, default=default)
expected = unpackb(data, encoding='utf-8', object_hook=convert)

assert expected == t


def test_tuple_ext():
t = ('one', 2, b'three', (4, ))

MSGPACK_EXT_TYPE_TUPLE = 0

def default(o):
if isinstance(o, tuple):
# Convert to list and pack
payload = packb(
list(o), strict_types=True, use_bin_type=True, default=default)
return ExtType(MSGPACK_EXT_TYPE_TUPLE, payload)
raise TypeError(repr(o))

def convert(code, payload):
if code == MSGPACK_EXT_TYPE_TUPLE:
# Unpack and convert to tuple
return tuple(unpackb(payload, encoding='utf-8', ext_hook=convert))
raise ValueError('Unknown Ext code {}'.format(code))

data = packb(t, strict_types=True, use_bin_type=True, default=default)
expected = unpackb(data, encoding='utf-8', ext_hook=convert)

assert expected == t