Skip to main content

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-python interfaces 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

Benchmark Run amsgpack_benchmark.py and then chart.py to get your values

Project details


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)

Uploaded Source

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

Hashes for amsgpack-0.3.2.tar.gz
Algorithm Hash digest
SHA256 a7e3a25c0f9474e4a9193f23cf538aaca259fe70abacda05e92d905acfdd3b2a
MD5 cfd47689de8b55fa9ae94c34d079e246
BLAKE2b-256 8127563927be579884c9d0e11264dc5ff163acac047329f62d00bdc3bfdbf0eb

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page