Skip to main content

A Python library offering a more concise syntax for data packing.

Project description

StructOvO

GitHub License GitHub Repo stars PyPi Downloads Python

A Python library offering a more concise syntax for data packing.

Installation

  • From pypi
pip install structovo

Usage

from structovo import *


class PackA(Packet):
    a: PADDING
    b: BYTE = b'A'
    c: CHAR = -1
    d: UCHAR = 1
    e: BOOL = False
    f: SHORT = -2
    g: USHORT = 2
    h: INT = -3
    i: UINT = 3
    j: LONG = -4
    k: ULONG = 4
    l: LONGLONG = -5
    m: ULONGLONG = 5
    n: SIZET = 12
    o: SSIZET = 34
    p: BINARY16 = 3.14
    q: FLOAT = 3.14
    r: DOUBLE = 3.14
    s: FixedString = (b"hello", 10)
    t: LengthPrefixedString = b"world"
    u: UnsignedPointer = 0x0d000721
    v: bytes = b'raw_bytes'


r = PackA.build(endianness=Endianness.NATIVE)
hex_list = [format(byte, '02x') for byte in r]
hex_str = ' '.join(hex_list)
print(hex_str)

And you will get:

00 41 ff 01 00 fe ff 02 00 fd ff ff ff 03 00 00 00 fc ff ff ff 04 00 00 00 fb ff ff ff ff ff ff ff 05 00 00 00 00 00 00 00 0c 00 00 00 00 00 00 00 22 00 00 00 00 00 00 00 48 42 c3 f5 48 40 1f 85 eb 51 b8 1e 09 40 68 65 6c 6c 6f 00 00 00 00 00 05 77 6f 72 6c 64 21 07 00 0d 00 00 00 00 72 61 77 5f 62 79 74 65 73

Advance

Supported Endianness

  • Endianness.BIG: Big-endian
  • Endianness.LITTLE: Little-endian
  • Endianness.NETWORK: Big-endian
  • Endianness.NATIVE: Depend on your device (Default)

Custom Data Types

You can define your own data types by simply inheriting the BaseType class:

from typing import Tuple, Type
from structovo import BaseType, Endianness


class MyDataType(BaseType):
    def check_validation(self) -> Tuple[bool, Type]:
        # Implement the validation of whether the self.value is valid.
        return ...

    def encode(self, endianness: Endianness) -> bytes:
        # Implement the operation of converting self.value to bytes.
        return ...    

Like this:

from typing import Tuple, Type
from structovo import BaseType, Endianness


class BYTE(BaseType):
    def check_validation(self) -> Tuple[bool, Type]:
        result = isinstance(self.value, bytes)
        return result, bytes

    def encode(self, endianness: Endianness) -> bytes:
        return self._pack('c', endianness)

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

structovo-1.0.0.tar.gz (3.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

structovo-1.0.0-py3-none-any.whl (4.9 kB view details)

Uploaded Python 3

File details

Details for the file structovo-1.0.0.tar.gz.

File metadata

  • Download URL: structovo-1.0.0.tar.gz
  • Upload date:
  • Size: 3.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for structovo-1.0.0.tar.gz
Algorithm Hash digest
SHA256 0ea29eafbb8b9048f0e483a68e64c7fab9d5f904c1cf7701c3e5a5e8b246acef
MD5 180e14004c4e1d79b85420d45f0d03f7
BLAKE2b-256 985a99af16ecb03a2d5b6aef90f60bb29d52d8dfa5e9e6ed12d03fa8034f369e

See more details on using hashes here.

Provenance

The following attestation bundles were made for structovo-1.0.0.tar.gz:

Publisher: release.yml on GuangChen2333/StructOvO

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file structovo-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: structovo-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 4.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for structovo-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 de5bbd175e5b6010638bbac5d9fedfd3f39c91c8bc3a705ed652ff10663ba072
MD5 f25149aa36afcfa12f55f322a9f698ae
BLAKE2b-256 56ed2bb121df9b7001b40d404b83c0b99309b9dc8fcf76106cd5d1dc097aa7d8

See more details on using hashes here.

Provenance

The following attestation bundles were made for structovo-1.0.0-py3-none-any.whl:

Publisher: release.yml on GuangChen2333/StructOvO

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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