read-protobuf
Small library to read serialized protobuf(s) directly into Pandas DataFrame.
This is intended to be a simple shortcut for translating serialized protobuf bytes / files directly to a dataframe.
Install
Available via pip:
$ pip install read-protobuf
Usage
Run the demo-notebook for an interactive demo.
import demo_pb2 # compiled protobuf message module
from read_protobuf import read_protobuf
MessageType = demo_pb2.MessageType() # instantiate a new message type
df = read_protobuf(b'\x00\x00', MessageType) # create a dataframe from serialized protobuf bytes
df = read_protobuf([b'\x00\x00', b'x00\x00'] MessageType) # read multiple protobuf bytes
df = read_protobuf('demo.pb', MessageType) # use file instead of bytes
df = read_protobuf(['demo.pb', 'demo2.pb'], MessageType) # read multiple files
# options
df = read_protobuf('demo.pb', MessageType, flatten=False) # don't flatten pb messages
df = read_protobuf('demo.pb', MessageType, prefix_nested=True) # prefix nested messages with parent keys (like pandas.io.json.json_normalize)
To compile a protobuf Message class from python, use:
$ protoc --python_out="." demo.proto
Alternatives
protobuf-to-dict
https://github.com/benhodgson/protobuf-to-dict
This library was developed earlier to convert protobufs to JSON via a dict.
MessageToDict, MessageToJson
The google protobuf library comes with utilities to convert messages to a dict or JSON,
then loaded by Pandas.
from google.protobuf.json_format import MessageToJson
from google.protobuf.json_format import MessageToDict
In brief tests, the read_protobuf package is about 2x as fast
as using MessageToDict and 3x as fast as MessageToJson.
Develop
To install a development version of the package, run from the root directory:
$ pip install -e .
- To install development dependencies, use the optional
[dev]dependencies:
$ pip install -e ".[dev]"
Format
Uses black and isort to format files.
$ make black
$ make isort
Lint
Uses ruff to lint application.
$ make ruff
Test
Uses pytest to run unit tests. From the root of the repository, run:
$ make pytest
# specify test
$ pytest -k "TestRead::test_read_bytes"
Code Coverage
Use coverage to monitor code coverage during tests.
To record coverage while running tests, run:
$ make pytest-cov
License
Metadata
Release files for read-protobuf 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| read-protobuf-0.2.0.tar.gz | 5.6 kB | Without provenance | Details for read-protobuf-0.2.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| read_protobuf-0.2.0-py3-none-any.whl | Python 3 | none | any | Details for read_protobuf-0.2.0-py3-none-any.whl |
Total release size: 10.3 kB
Release files / read-protobuf-0.2.0.tar.gz
| Download URL | read-protobuf-0.2.0.tar.gz |
|---|---|
| Size | 5.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
42755793bc107317bca4400851056f7e1c73376a8e90d748c2ed8bbc9c6372c2
|
|
BLAKE2b-256 checksum How to use checksums |
6d0215b98644924d4d2d7b637ba6b6d8ca033d465415f66e00e157033caf4b4a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.11.3
|
Release files / read_protobuf-0.2.0-py3-none-any.whl
| Download URL | read_protobuf-0.2.0-py3-none-any.whl |
|---|---|
| Size | 4.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
643ff9dfc4185f7e5f89d4447c6e452e5d86cf95051ab3f95cd5c39aec7a3d79
|
|
BLAKE2b-256 checksum How to use checksums |
9d1b46c10517f5fe91298be9f4bc2f185a87deb691b7f3b10401c55aa85772c5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.11.3
|
Security for read-protobuf 0.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.