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

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.1.tar.gz (36.9 kB view details)

Uploaded Source

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

Hashes for amsgpack-0.3.1.tar.gz
Algorithm Hash digest
SHA256 de2c53eae47002d1e8da6c67fd93900c060f40299f31361f025b4b5622743758
MD5 1c83fda6534dc518eff8f5fc3defa595
BLAKE2b-256 c1d5e1238b9a01c06bf4d33431f4069a6148501a33d6d9477f956ca3225744ec

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