Skip to main content

"Binary parsing for dummies!"

Project description

pabo: Binary parsing for dummies!


Doc Coverage

License Stars

Gitmoji Code style: black

What is this?

Parsing binary data from Python has always been a bit of a pain, thanks to the weirdly designed struct module in Python's standard library. struct uses format strings to specify the layout of binary data, where each character specifies the type of data being packed/unpacked. But no can remember the format characters to begin with! This has led to numerous packages cropping in an attempt to solve the problem, such as:

and many others. pabo is my response to such packages. It makes parsing binary data so easy, anyone could do it! For example, here is how you would parse the beginning of a PNG file to get the width and height of the image:

import pabo as pb

png = pb.Spec(
    {
        "magic": pb.Const(
            b"\x89PNG\x0d\x0a\x1a\x0a",
            pb.Bytes(8),
        ),
        "ihdr_size": pb.Int(4, endian="big"),
        "ihdr_id": pb.Const(b"IHDR", pb.Bytes(4)),
        "width": pb.Int(4, endian="big"),
        "height": pb.Int(4, endian="big"),
    }
)

data = png.parse("example.png")

which would return a dictionary with the parsed data, like so:

{
     'magic': b'\x89PNG\r\n\x1a\n',
     'ihdr_size': 13,
     'ihdr_id': b'IHDR',
     'width': 602,
     'height': 172,
}

For more real examples, check out the priwo package, which uses pabo to parse pulsar data from binary files (in fact, many of pabo's features are directly motivated by their need in priwo!). Documentation is in development, so stay tuned!

Installation

Installing pabo is as easy as:

pip install pabo

Philosophy

The philosophy behind pabo is: be simple, yet be fast and full of features. This implies that I deliberately avoid coding in features that are too magical or obscure, in contrast to other packages, such as construct. This allows users of pabo to also become contributors, since the internals of pabo are clean and easy-to-understand.

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

pabo-0.1.3.tar.gz (15.9 kB view hashes)

Uploaded Source

Built Distributions

pabo-0.1.3-pp39-pypy39_pp73-win_amd64.whl (66.0 kB view hashes)

Uploaded PyPy Windows x86-64

pabo-0.1.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (95.8 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

pabo-0.1.3-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (102.0 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686

pabo-0.1.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl (67.8 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

pabo-0.1.3-pp38-pypy38_pp73-win_amd64.whl (66.0 kB view hashes)

Uploaded PyPy Windows x86-64

pabo-0.1.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (96.5 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

pabo-0.1.3-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (102.2 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686

pabo-0.1.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl (67.8 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

pabo-0.1.3-pp37-pypy37_pp73-win_amd64.whl (65.9 kB view hashes)

Uploaded PyPy Windows x86-64

pabo-0.1.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (97.3 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

pabo-0.1.3-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (102.9 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686

pabo-0.1.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl (67.8 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

pabo-0.1.3-cp311-cp311-win_amd64.whl (66.1 kB view hashes)

Uploaded CPython 3.11 Windows x86-64

pabo-0.1.3-cp311-cp311-win32.whl (58.3 kB view hashes)

Uploaded CPython 3.11 Windows x86

pabo-0.1.3-cp311-cp311-musllinux_1_1_x86_64.whl (618.7 kB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ x86-64

pabo-0.1.3-cp311-cp311-musllinux_1_1_i686.whl (674.3 kB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ i686

pabo-0.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (102.3 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

pabo-0.1.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (106.8 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ i686

pabo-0.1.3-cp311-cp311-macosx_10_9_x86_64.whl (68.7 kB view hashes)

Uploaded CPython 3.11 macOS 10.9+ x86-64

pabo-0.1.3-cp310-cp310-win_amd64.whl (66.2 kB view hashes)

Uploaded CPython 3.10 Windows x86-64

pabo-0.1.3-cp310-cp310-win32.whl (58.4 kB view hashes)

Uploaded CPython 3.10 Windows x86

pabo-0.1.3-cp310-cp310-musllinux_1_1_x86_64.whl (618.7 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ x86-64

pabo-0.1.3-cp310-cp310-musllinux_1_1_i686.whl (674.3 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ i686

pabo-0.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (102.3 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

pabo-0.1.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl (106.8 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ i686

pabo-0.1.3-cp310-cp310-macosx_10_9_x86_64.whl (68.7 kB view hashes)

Uploaded CPython 3.10 macOS 10.9+ x86-64

pabo-0.1.3-cp39-cp39-win_amd64.whl (65.7 kB view hashes)

Uploaded CPython 3.9 Windows x86-64

pabo-0.1.3-cp39-cp39-win32.whl (58.4 kB view hashes)

Uploaded CPython 3.9 Windows x86

pabo-0.1.3-cp39-cp39-musllinux_1_1_x86_64.whl (619.0 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ x86-64

pabo-0.1.3-cp39-cp39-musllinux_1_1_i686.whl (674.4 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ i686

pabo-0.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (102.1 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

pabo-0.1.3-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl (107.0 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ i686

pabo-0.1.3-cp39-cp39-macosx_10_9_x86_64.whl (68.8 kB view hashes)

Uploaded CPython 3.9 macOS 10.9+ x86-64

pabo-0.1.3-cp38-cp38-win_amd64.whl (66.0 kB view hashes)

Uploaded CPython 3.8 Windows x86-64

pabo-0.1.3-cp38-cp38-win32.whl (58.4 kB view hashes)

Uploaded CPython 3.8 Windows x86

pabo-0.1.3-cp38-cp38-musllinux_1_1_x86_64.whl (618.4 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ x86-64

pabo-0.1.3-cp38-cp38-musllinux_1_1_i686.whl (674.1 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ i686

pabo-0.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (101.5 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

pabo-0.1.3-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl (106.7 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ i686

pabo-0.1.3-cp38-cp38-macosx_10_9_x86_64.whl (68.6 kB view hashes)

Uploaded CPython 3.8 macOS 10.9+ x86-64

pabo-0.1.3-cp37-cp37m-win_amd64.whl (66.3 kB view hashes)

Uploaded CPython 3.7m Windows x86-64

pabo-0.1.3-cp37-cp37m-win32.whl (59.2 kB view hashes)

Uploaded CPython 3.7m Windows x86

pabo-0.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl (620.0 kB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.1+ x86-64

pabo-0.1.3-cp37-cp37m-musllinux_1_1_i686.whl (675.0 kB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.1+ i686

pabo-0.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (102.9 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

pabo-0.1.3-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl (108.1 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ i686

pabo-0.1.3-cp37-cp37m-macosx_10_9_x86_64.whl (68.6 kB view hashes)

Uploaded CPython 3.7m macOS 10.9+ x86-64

pabo-0.1.3-cp36-cp36m-win_amd64.whl (67.0 kB view hashes)

Uploaded CPython 3.6m Windows x86-64

pabo-0.1.3-cp36-cp36m-win32.whl (60.0 kB view hashes)

Uploaded CPython 3.6m Windows x86

pabo-0.1.3-cp36-cp36m-musllinux_1_1_x86_64.whl (619.8 kB view hashes)

Uploaded CPython 3.6m musllinux: musl 1.1+ x86-64

pabo-0.1.3-cp36-cp36m-musllinux_1_1_i686.whl (675.0 kB view hashes)

Uploaded CPython 3.6m musllinux: musl 1.1+ i686

pabo-0.1.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (103.4 kB view hashes)

Uploaded CPython 3.6m manylinux: glibc 2.17+ x86-64

pabo-0.1.3-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl (108.1 kB view hashes)

Uploaded CPython 3.6m manylinux: glibc 2.17+ i686

pabo-0.1.3-cp36-cp36m-macosx_10_9_x86_64.whl (68.6 kB view hashes)

Uploaded CPython 3.6m macOS 10.9+ x86-64

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