Skip to main content

dataclasses-struct

PyPI version Python versions Tests status Code coverage License: MIT Documentation

A simple Python package that combines dataclasses with struct for packing and unpacking Python dataclasses to fixed-length bytes representations.

Documentation: https://harrymander.xyz/dataclasses-struct

Example

from typing import Annotated

import dataclasses_struct as dcs

@dcs.dataclass_struct()
class Test:
    x: int
    y: float
    z: dcs.UnsignedShort
    s: Annotated[bytes, 10]  # fixed-length byte array of length 10

@dcs.dataclass_struct()
class Container:
    test1: Test
    test2: Test
>>> dcs.is_dataclass_struct(Test)
True
>>> t1 = Test(100, -0.25, 0xff, b'12345')
>>> dcs.is_dataclass_struct(t1)
True
>>> t1
Test(x=100, y=-0.25, z=255, s=b'12345')
>>> packed = t1.pack()
>>> packed
b'd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd0\xbf\xff\x0012345\x00\x00\x00\x00\x00'
>>> Test.from_packed(packed)
Test(x=100, y=-0.25, z=255, s=b'12345\x00\x00\x00\x00\x00')
>>> t2 = Test(1, 100, 12, b'hello, world')
>>> c = Container(t1, t2)
>>> Container.from_packed(c.pack())
Container(test1=Test(x=100, y=-0.25, z=255, s=b'12345\x00\x00\x00\x00\x00'), test2=Test(x=1, y=100.0, z=12, s=b'hello, wor'))

Installation

This package is available on pypi:

pip install dataclasses-struct

To work correctly with mypy, an extension is required; add to your mypy.ini:

[mypy]
plugins = dataclasses_struct.ext.mypy_plugin

See the docs for more info on type checking.

Development and contributing

Pull requests are welcomed!

This project uses uv for packaging and dependency management. To install all dependencies (including development dependencies) into a virtualenv for local development:

uv sync

Uses pytest for testing:

uv run pytest

(You may omit the uv run if the virtualenv is activated.)

Uses ruff for linting and formatting, which is enforced on pull requests:

uv run ruff format
uv run ruff check

See pyproject.toml for the list of enabled checks. I recommend installing the provided pre-commmit hooks to ensure new commits pass linting:

pre-commit install

This will help speed-up pull requests by reducing the chance of failing CI checks.

PRs must also pass mypy checks (uv run mypy).

Metadata

Release files for dataclasses-struct 1.5.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dataclasses-struct 1.5.1
File Size Uploaded
dataclasses_struct-1.5.1.tar.gz 188.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for dataclasses-struct 1.5.1
File Interpreter ABI Platform
dataclasses_struct-1.5.1-py3-none-any.whl Python 3 none any Details

Total release size: 203.7 kB

Release files / dataclasses_struct-1.5.1.tar.gz

Download URL dataclasses_struct-1.5.1.tar.gz
Size 188.4 kB
Tags Source
SHA-256 checksum
How to use checksums
e65bf61feff0dbb8eb4f4f6523a0eae7f58172ec0484e7a0c5521b255caee2dc
BLAKE2b-256 checksum
How to use checksums
9bb9c5c3b20c56857d77df815c12153a825fb2991d9357fe4786d9751bb3a950
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.10 {"installer":{"name":"uv","version":"0.11.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / dataclasses_struct-1.5.1-py3-none-any.whl

Download URL dataclasses_struct-1.5.1-py3-none-any.whl
Size 15.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d6472a8a5c7781a46f5f063e4f3371e0f31476c853149043b764fb533b258330
BLAKE2b-256 checksum
How to use checksums
6060f989bad64b0cc4739d3f6b9d95a69052e1266e873bc2cbffc61b3d49e10b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.10 {"installer":{"name":"uv","version":"0.11.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

This release

1.5.1 This release

2 release files

1.5.0

2 release files

1.4.1

2 release files

1.4.0

2 release files

1.3.0

2 release files

1.2.0

2 release files

1.1.0

2 release files

1.0.0

2 release files

0.8.4

2 release files

0.8.3

2 release files

0.8.2

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page