MessagePack serializer
Project description
This project is a branch of msgpack on QPython.
How to use
One-shot pack & unpack
Use packb
for packing and unpackb
for unpacking.
msgpack provides dumps
and loads
as an alias for compatibility with
json
and pickle
.
pack
and dump
packs to a file-like object.
unpack
and load
unpacks from a file-like object.
>>> import msgpack
>>> msgpack.packb([1, 2, 3])
'\x93\x01\x02\x03'
>>> msgpack.unpackb(_)
[1, 2, 3]
Read the docstring for options.
Streaming unpacking
Unpacker
is a "streaming unpacker". It unpacks multiple objects from one
stream (or from bytes provided through its feed
method).
import msgpack
from io import BytesIO
buf = BytesIO()
for i in range(100):
buf.write(msgpack.packb(i))
buf.seek(0)
unpacker = msgpack.Unpacker(buf)
for unpacked in unpacker:
print(unpacked)
Packing/unpacking of custom data type
It is also possible to pack/unpack custom data types. Here is an example for
datetime.datetime
.
import datetime
import msgpack
useful_dict = {
"id": 1,
"created": datetime.datetime.now(),
}
def decode_datetime(obj):
if '__datetime__' in obj:
obj = datetime.datetime.strptime(obj["as_str"], "%Y%m%dT%H:%M:%S.%f")
return obj
def encode_datetime(obj):
if isinstance(obj, datetime.datetime):
return {'__datetime__': True, 'as_str': obj.strftime("%Y%m%dT%H:%M:%S.%f")}
return obj
packed_dict = msgpack.packb(useful_dict, default=encode_datetime)
this_dict_again = msgpack.unpackb(packed_dict, object_hook=decode_datetime)
Unpacker
's object_hook
callback receives a dict; the
object_pairs_hook
callback may instead be used to receive a list of
key-value pairs.
NOTE: msgpack can encode datetime with tzinfo into standard ext type for now.
See datetime
option in Packer
docstring.
Extended types
It is also possible to pack/unpack custom data types using the ext type.
>>> import msgpack
>>> import array
>>> def default(obj):
... if isinstance(obj, array.array) and obj.typecode == 'd':
... return msgpack.ExtType(42, obj.tostring())
... raise TypeError("Unknown type: %r" % (obj,))
...
>>> def ext_hook(code, data):
... if code == 42:
... a = array.array('d')
... a.fromstring(data)
... return a
... return ExtType(code, data)
...
>>> data = array.array('d', [1.2, 3.4])
>>> packed = msgpack.packb(data, default=default)
>>> unpacked = msgpack.unpackb(packed, ext_hook=ext_hook)
>>> data == unpacked
True
Advanced unpacking control
As an alternative to iteration, Unpacker
objects provide unpack
,
skip
, read_array_header
and read_map_header
methods. The former two
read an entire message from the stream, respectively de-serialising and returning
the result, or ignoring it. The latter two methods return the number of elements
in the upcoming container, so that each element in an array, or key-value pair
in a map, can be unpacked or skipped individually.
Notes
string and binary type in old msgpack spec
Early versions of msgpack didn't distinguish string and binary types. The type for representing both string and binary types was named raw.
You can pack into and unpack from this old spec using use_bin_type=False
and raw=True
options.
>>> import msgpack
>>> msgpack.unpackb(msgpack.packb([b'spam', 'eggs'], use_bin_type=False), raw=True)
[b'spam', b'eggs']
>>> msgpack.unpackb(msgpack.packb([b'spam', 'eggs'], use_bin_type=True), raw=False)
[b'spam', 'eggs']
ext type
To use the ext type, pass msgpack.ExtType
object to packer.
>>> import msgpack
>>> packed = msgpack.packb(msgpack.ExtType(42, b'xyzzy'))
>>> msgpack.unpackb(packed)
ExtType(code=42, data='xyzzy')
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file msgpack_qpython-1.1.0.1.tar.gz
.
File metadata
- Download URL: msgpack_qpython-1.1.0.1.tar.gz
- Upload date:
- Size: 273.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 |
8590628078226ef660c48d49029b70309dc8eaffccf3ed5d08ef9bf2d8b727c5
|
|
MD5 |
db470edb44b442b668a953f9eb01baaf
|
|
BLAKE2b-256 |
2ea16679508c150349c0231c264c101257c3f7eda6821aafabc69c50ffdcaf1b
|
File details
Details for the file msgpack_qpython-1.1.0.1-py3-none-any.whl
.
File metadata
- Download URL: msgpack_qpython-1.1.0.1-py3-none-any.whl
- Upload date:
- Size: 273.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 |
bb72b4b00e3f39da34b5124998e4ce4d39d512da9f7e4a887d418db22f24a872
|
|
MD5 |
9b34851c0116e0058fd8aaf6b9ccaf04
|
|
BLAKE2b-256 |
c75f41bd4e41f704d40e32fe26b54b2d516bef0302e02dd934bab985899d9c87
|