Skip to main content

A Python library written in Rust for JSON/Protobuf conversion

Project description

protoruf

protoruf logo

High-performance JSON ↔ Protobuf conversion for Python, powered by Rust

📖 Documentation💻 Source🐛 Issues


A high-performance Python library written in Rust for converting between JSON and Protobuf messages.

Features

  • Fast — JSON ↔ Protobuf conversion powered by Rust
  • 🔒 Type-safe — Explicit message type specification
  • 📦 Built-in proto compilation — Uses Rust protox, no external dependencies

Installation

pip install protoruf

Quick Start

from protoruf import json_to_protobuf, protobuf_to_json, compile_proto

# 1. Compile your .proto file
descriptor = compile_proto("message.proto")

# 2. Convert JSON to Protobuf
json_data = '{"id": "123", "content": "Hello", "priority": 1}'
protobuf_bytes = json_to_protobuf(json_data, descriptor, message_type="message.Message")

# 3. Convert Protobuf back to JSON
json_str = protobuf_to_json(protobuf_bytes, descriptor, message_type="message.Message", pretty=True)
print(json_str)

API Reference

compile_proto(proto_path, include_paths=None, output_path=None)

Compile a .proto file to a descriptor set.

Parameter Type Description
proto_path str Path to the .proto file
include_paths list[str] | None Optional include paths for imports
output_path str | None Optional path to save the descriptor

Returns: bytes — The compiled descriptor set.


load_descriptor(descriptor_path)

Load a pre-compiled descriptor set from a file.

Parameter Type Description
descriptor_path str Path to the .desc file

Returns: bytes — The descriptor set.


json_to_protobuf(json_str, descriptor_bytes, message_type)

Convert a JSON string to a Protobuf message.

Parameter Type Description
json_str str JSON string to convert
descriptor_bytes bytes Compiled protobuf descriptor set
message_type str Full message type name (e.g. "message.Message")

Returns: bytes — The Protobuf message.


protobuf_to_json(protobuf_bytes, descriptor_bytes, message_type, pretty=False)

Convert a Protobuf message to a JSON string.

Parameter Type Description
protobuf_bytes bytes Protobuf message as bytes
descriptor_bytes bytes Compiled protobuf descriptor set
message_type str Full message type name (e.g. "message.Message")
pretty bool If True, format JSON with indentation

Returns: str — The JSON representation.


pydantic_to_protobuf(pydantic_model, descriptor_bytes, message_type)

Convert a Pydantic model directly to a Protobuf message.

Parameter Type Description
pydantic_model BaseModel Pydantic model instance to convert
descriptor_bytes bytes Compiled protobuf descriptor set
message_type str Full message type name (e.g. "message.Message")

Returns: bytes — The Protobuf message.


protobuf_to_pydantic(protobuf_bytes, descriptor_bytes, model_class, message_type)

Convert a Protobuf message directly to a Pydantic model instance.

Parameter Type Description
protobuf_bytes bytes Protobuf message as bytes
descriptor_bytes bytes Compiled protobuf descriptor set
model_class Type[T] The Pydantic model class to instantiate
message_type str Full message type name (e.g. "message.Message")

Returns: T — An instance of the specified Pydantic model class.

Usage with Pydantic

protoruf provides built-in functions for seamless Pydantic integration:

from pydantic import BaseModel
from protoruf import compile_proto, pydantic_to_protobuf, protobuf_to_pydantic

class Message(BaseModel):
    id: str = ""
    content: str = ""
    priority: int = 0

descriptor = compile_proto("message.proto")
msg = Message(id="123", content="Hello", priority=1)

# Direct conversion from Pydantic to Protobuf
protobuf_bytes = pydantic_to_protobuf(msg, descriptor, message_type="message.Message")

# Direct conversion from Protobuf back to Pydantic
result = protobuf_to_pydantic(protobuf_bytes, descriptor, Message, message_type="message.Message")

Links

License

MIT

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

protoruf-0.1.4.tar.gz (636.5 kB view details)

Uploaded Source

Built Distributions

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

protoruf-0.1.4-cp312-cp312-win_amd64.whl (1.0 MB view details)

Uploaded CPython 3.12Windows x86-64

protoruf-0.1.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

protoruf-0.1.4-cp312-cp312-macosx_11_0_arm64.whl (1.0 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

File details

Details for the file protoruf-0.1.4.tar.gz.

File metadata

  • Download URL: protoruf-0.1.4.tar.gz
  • Upload date:
  • Size: 636.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for protoruf-0.1.4.tar.gz
Algorithm Hash digest
SHA256 436048bc9437107fd818c8b41c8514afd8cc10da9a64462d5936907418c290cb
MD5 1b8c9846a49928ae2a3d7585827706b9
BLAKE2b-256 473abcc0241d37e9bb8c9aa4c1969f1958686bac1afadad2976d374b0b43878f

See more details on using hashes here.

Provenance

The following attestation bundles were made for protoruf-0.1.4.tar.gz:

Publisher: publish-pypi.yml on EdwinAlkins/protoruf

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

File details

Details for the file protoruf-0.1.4-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: protoruf-0.1.4-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 1.0 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for protoruf-0.1.4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 02aa8329402e7f972ac74d0aefae9c5b62360d4d880de6efb4d72564eedfe66f
MD5 f0c549f76710eff493a79edc36911aae
BLAKE2b-256 82c423748a8370bc5a86a5bfa25d677c3034c6cfc269dc8db87e30b26c8f88f2

See more details on using hashes here.

Provenance

The following attestation bundles were made for protoruf-0.1.4-cp312-cp312-win_amd64.whl:

Publisher: publish-pypi.yml on EdwinAlkins/protoruf

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

File details

Details for the file protoruf-0.1.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for protoruf-0.1.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 54de90f3b6f31cea212c72c31e98db388a8bb1c10191ffd64eac8aa72a555914
MD5 182883699371ff3dfc49b8f3807b825c
BLAKE2b-256 ad09dcc97bbcbb50e47d12f81ecefdf3ca791cbbabf6165766adcdaff96ebc94

See more details on using hashes here.

Provenance

The following attestation bundles were made for protoruf-0.1.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish-pypi.yml on EdwinAlkins/protoruf

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

File details

Details for the file protoruf-0.1.4-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for protoruf-0.1.4-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 06fb84595884f36ba8765341507d593e1ecd39cb700eba8819d6b044d12113a2
MD5 5a0f33aa668b3c65a2910048a9d344db
BLAKE2b-256 e582ba5382e21a0e076a1af4376717fd2e7793ebb249d43afa8a90ba473b897a

See more details on using hashes here.

Provenance

The following attestation bundles were made for protoruf-0.1.4-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: publish-pypi.yml on EdwinAlkins/protoruf

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