Another MessagePack library
Project description
Python MessagePack module
C library for python 3.10+.
Why:
- I couldn't negotiate adding type hints to msgpack-python
- I couldn't negotiate adding Unpacker to ormsgpack
- There's no stream unpacking in msgspec
- I couldn't find another MessagePack library
msgpack-pythoninterfaces are messy and the library is a bit slow
Installation
pip install amsgpack
Documentation
https://amsgpack.readthedocs.io/
Examples
>>> from amsgpack import packb, unpackb
>>> packb({"compact": True, "schema": 0})
b'\x82\xa7compact\xc3\xa6schema\x00'
>>> unpackb(b'\x82\xa7compact\xc3\xa6schema\x00')
{'compact': True, 'schema': 0}
>>> from amsgpack import FileUnpacker
>>> from io import BytesIO
>>> for data in FileUnpacker(BytesIO(b'\x00\x01\x02')):
... print(data)
...
0
1
2
>>> from amsgpack import Unpacker
>>> unpacker = Unpacker()
>>> unpacker.feed(b'\x82\xa7compact\xc3\xa6schema\x00')
>>> next(unpacker)
{'compact': True, 'schema': 0}
Ext Type Packing
When encountering unsupported type a default callback is called:
>>> from typing import Any
>>> from amsgpack import Ext, Packer
>>> from array import array
>>>
>>> def default(value: Any) -> Ext:
... if isinstance(value, array):
... return Ext(1, value.tobytes())
... raise ValueError(f"Unserializable object: {value}")
...
>>> packb = Packer(default=default).packb
>>> packb(array('I', [0xBA, 0xDE]))
b'\xd7\x01\xba\x00\x00\x00\xde\x00\x00\x00'
Ext Type Unpacking
By default when encountering Ext type, a conversion to datetime.datetime
happens when code == 1, otherwise Ext instance is returned.
>>> from amsgpack import Ext, Unpacker
>>> from array import array
>>>
>>> def ext_hook(ext: Ext):
... if ext.code == 1:
... return array("I", ext.data)
... return ext.default()
...
>>> Unpacker(ext_hook=ext_hook).unpackb(
... b"\xd7\x01\xba\x00\x00\x00\xde\x00\x00\x00"
... )
array('I', [186, 222])
Benchmark
Run
amsgpack_benchmark.py and then chart.py to get your values
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
amsgpack-0.3.3.tar.gz
(38.3 kB
view details)
File details
Details for the file amsgpack-0.3.3.tar.gz.
File metadata
- Download URL: amsgpack-0.3.3.tar.gz
- Upload date:
- Size: 38.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.2.0 CPython/3.10.20
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b85522eae0bc9157f5bd4bf0ab328a4a81283222223904315bec0e6f9d0b1892
|
|
| MD5 |
27be903ebab8523a7c5b8f7a0cf0bc74
|
|
| BLAKE2b-256 |
1017e40618d1c9a74071fd6a6adfbd31f54f6596bdaeb1cf794dc4d7fad0f01d
|