Skip to main content

A modern library that simplifies packing and unpacking to a whole other level.

Project description

packer.typed

PyPI version Python versions

A modern library that simplifies packing and unpacking to a whole other level.

Usage

Basic Usage

from dataclasses import dataclass
from packer import *

@packable
@dataclass
class SimpleStruct:
    int32_member: Pack[int32]
    int8_member: Pack[int8]
    float_member: OptionalPack[float]

s = SimpleStruct(3, 2, None)
s.pack() # bytearray(b'\x03\x00\x00\x00\x02')

s.unpack(bytearray(b'\x01\x00\x00\x00\x04'))
# s.int32_member == 1
# s.int8_member == 4
# s.float_member == None

Custom types

from enum import IntEnum
from dataclasses import dataclass

from packer import *
from packer.protocols import TypeDescriptor

class FileTypes(IntEnum):
    UNK = 0
    TXT = 1
    BIN = 2

class _FileType(TypeDescriptor):
    _size: int = 1

    @classmethod
    def pack(cls, val: FileTypes) -> FileTypes:
        return val.to_bytes(1, "little")

    @classmethod
    def unpack(cls, data: bytes) -> FileTypes:
        return FileTypes(int.from_bytes(data[:cls._size], "little"))
    
FileType = _FileType | FileTypes # to get the typehint of FileTypes back

@packable
@dataclass
class File:
    file_type: Pack[FileType]
    file_data: Pack[AllData]

file = File(FileTypes.BIN, bytearray([3]*5))
file.pack() # bytearray(b'\x02\x03\x03\x03\x03\x03')

file.unpack(bytearray(b'\x01\x03\x03\x03\x03\x03hi!'))
# file.file_type == FileTypes.TXT
# file.data == b"\x03\x03\x03\x03\x03hi!"

Packing a packable

Nested packable attributes must have default values to ensure proper instantiation

@packable
@dataclass
class Header:
    data_type: Pack[int8] = None
    data_size: Pack[int32] = None

@packable
@dataclass
class Packet:
    header: Pack[Header]
    data: Pack[AllData]

packet = Packet(Header(1, 5), b"hello")
packet.pack() # bytearray(b"\x01\x05\x00\x00\x00hello")

packet.unpack(bytearray(b"\x04\x02\x00\x00\x00hi"))
# packet.header.data_type == 4
# packet.header.data_size == 2
# packet.data == hi

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

packer_typed-0.2.1.tar.gz (8.8 kB view details)

Uploaded Source

Built Distribution

packer.typed-0.2.1-py3-none-any.whl (9.8 kB view details)

Uploaded Python 3

File details

Details for the file packer_typed-0.2.1.tar.gz.

File metadata

  • Download URL: packer_typed-0.2.1.tar.gz
  • Upload date:
  • Size: 8.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for packer_typed-0.2.1.tar.gz
Algorithm Hash digest
SHA256 7ffe19c96df291c0d32f63cdd5057147f3bbdfa3746eadf95cc2de73bf61c6e3
MD5 2596b1b1192ee7d2c18cf69afc0e308f
BLAKE2b-256 de5ffadd9fcaeb760d333743fb5e4b5112d7a523dbd78c3d0e51ba27e4fdaedf

See more details on using hashes here.

File details

Details for the file packer.typed-0.2.1-py3-none-any.whl.

File metadata

File hashes

Hashes for packer.typed-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 04f4855608f19fc7eb549b897ebd7c28c1a87d043a9d32db0bbb9e2e8a6d36b6
MD5 5bdece666b8c26d104f447e4beceeb12
BLAKE2b-256 620e8e6f38b5a8cb148c64281ece28ba1336e0deb16a2af8a6ad1225fc04950f

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