mirror of
https://github.com/msgpack/msgpack-python.git
synced 2025-10-19 20:03:16 +00:00

The following steps have been taken: 1. Black was updated to latest version. The code has been formatted with the new version. 2. The pyupgrade utility is installed. This helped to remove all the code that was needed to support Python < 3.7. Fix #541. Co-authored-by: Inada Naoki <songofacandy@gmail.com>
58 lines
1.7 KiB
Python
58 lines
1.7 KiB
Python
from collections import namedtuple
|
|
from msgpack import packb, unpackb, ExtType
|
|
|
|
|
|
def test_namedtuple():
|
|
T = namedtuple("T", "foo bar")
|
|
|
|
def default(o):
|
|
if isinstance(o, T):
|
|
return dict(o._asdict())
|
|
raise TypeError(f"Unsupported type {type(o)}")
|
|
|
|
packed = packb(T(1, 42), strict_types=True, use_bin_type=True, default=default)
|
|
unpacked = unpackb(packed, raw=False)
|
|
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(f"Unsupported type {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, raw=False, 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, raw=False, ext_hook=convert))
|
|
raise ValueError(f"Unknown Ext code {code}")
|
|
|
|
data = packb(t, strict_types=True, use_bin_type=True, default=default)
|
|
expected = unpackb(data, raw=False, ext_hook=convert)
|
|
|
|
assert expected == t
|