Skip to main content

Simple, fast, and space-efficient (de)serialization for simple Python classes

Project description

Miniserial

Miniserial is a Python package for dead-simple, space-efficient serialization and deserialization of simple dataclasses. There are many great packages for general purpose serialization in the standard library and on PyPI (e.g. json, marshal, pickle, ujson, bson, etc.), but most use serialization formats that can come with significant byte overhead. Sometimes, project constraints—like the 256-byte-max-packet radio devices that inspired this package—encourage the use of a much more compact format, something akin to protobuf or the layout of C structs. But libraries in this space typically come with the overhead of implementing manual serializers, modifying class fields with various wrappers, or using non python data specifications (e.g. .proto files).

Miniserial makes compact serialization easy. Simply have your dataclass inherit from the Serialization mixin, and serialize and deserialize methods will be automatically generated for the class. For example:

from dataclasses import dataclass
from miniserial import Serializable

@dataclass
class Person(Serializable):
    name   : str
    age    : int
    titles : list[str]
    balance: float
    
p = Person("Bob", 34, ["Mr.", "Dr.", "Professor"], 239847.25)
assert Person.deserialize(p.serialize()) == p

Classes that inherit the Serializable mixin must be dataclasses composed of fields annotated with simple types. Postponed annotation evaluation (PEP 563) is not currently supported, so serializable classes must not be defined in a file with the import: from __future__ import annotations.

Documentation of supported types and the serialization format is on the way. For now, bool, int, float, str, and list are supported. int and float are taken to be 32 bit values. Support for more types, including int64, float64, etc. from numpy are on the horizon.

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

miniserial-0.1.0.tar.gz (4.9 kB view details)

Uploaded Source

Built Distribution

miniserial-0.1.0-py3-none-any.whl (4.5 kB view details)

Uploaded Python 3

File details

Details for the file miniserial-0.1.0.tar.gz.

File metadata

  • Download URL: miniserial-0.1.0.tar.gz
  • Upload date:
  • Size: 4.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.9

File hashes

Hashes for miniserial-0.1.0.tar.gz
Algorithm Hash digest
SHA256 8b0ef2aec3848dae69d55b0e2011e4150fde191738d309e30fbb43b68642f20d
MD5 adb8c050b57bfe10880f14ac073a5446
BLAKE2b-256 a3c1ad1459a68af1dfc1915c6aaac4c17ecbeafa83b6ed2c9a25444a24bbb217

See more details on using hashes here.

File details

Details for the file miniserial-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: miniserial-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 4.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.9

File hashes

Hashes for miniserial-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8718bf1d89c500e95620151cbdc1672d7f958a2673be7c040b983093aa0e5075
MD5 ce2c5f456cea7b676334ddcf17869dd4
BLAKE2b-256 ba0f4b041abc807bf66161878cd3af5f4ad9c040a067e6fd6dafd7a2ee5c275b

See more details on using hashes here.

Supported by

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