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.2.tar.gz
(37.1 kB
view details)
File details
Details for the file amsgpack-0.3.2.tar.gz.
File metadata
- Download URL: amsgpack-0.3.2.tar.gz
- Upload date:
- Size: 37.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.10.18
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a7e3a25c0f9474e4a9193f23cf538aaca259fe70abacda05e92d905acfdd3b2a
|
|
| MD5 |
cfd47689de8b55fa9ae94c34d079e246
|
|
| BLAKE2b-256 |
8127563927be579884c9d0e11264dc5ff163acac047329f62d00bdc3bfdbf0eb
|