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
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.1.tar.gz
(36.9 kB
view details)
File details
Details for the file amsgpack-0.3.1.tar.gz.
File metadata
- Download URL: amsgpack-0.3.1.tar.gz
- Upload date:
- Size: 36.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.10.18
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
de2c53eae47002d1e8da6c67fd93900c060f40299f31361f025b4b5622743758
|
|
| MD5 |
1c83fda6534dc518eff8f5fc3defa595
|
|
| BLAKE2b-256 |
c1d5e1238b9a01c06bf4d33431f4069a6148501a33d6d9477f956ca3225744ec
|