Skip to main content

Protocol Buffers using Python type annotations

Project description

pure-protobuf

GitHub Workflow Status Code coverage PyPI - Downloads PyPI – Version PyPI – Python License

Wow! Such annotated! Very buffers!

Documentation

Documentation

Quick examples

.proto definition

It's not needed for pure-protobuf, but for the sake of an example, let's consider the following definition:

syntax = "proto3";

message SearchRequest {
  string query = 1;
  int32 page_number = 2;
  int32 result_per_page = 3;
}

And here's the same via pure-protobuf:

With dataclasses

from dataclasses import dataclass
from io import BytesIO

from pure_protobuf.annotations import Field
from pure_protobuf.message import BaseMessage
from typing_extensions import Annotated


@dataclass
class SearchRequest(BaseMessage):
    query: Annotated[str, Field(1)] = ""
    page_number: Annotated[int, Field(2)] = 0
    result_per_page: Annotated[int, Field(3)] = 0


request = SearchRequest(query="hello", page_number=1, result_per_page=10)
buffer = bytes(request)
assert buffer == b"\x0A\x05hello\x10\x01\x18\x0A"
assert SearchRequest.read_from(BytesIO(buffer)) == request

With pydantic

from io import BytesIO

from pure_protobuf.annotations import Field
from pure_protobuf.message import BaseMessage
from pydantic import BaseModel
from typing_extensions import Annotated


class SearchRequest(BaseMessage, BaseModel):
    query: Annotated[str, Field(1)] = ""
    page_number: Annotated[int, Field(2)] = 0
    result_per_page: Annotated[int, Field(3)] = 0


request = SearchRequest(query="hello", page_number=1, result_per_page=10)
buffer = bytes(request)
assert buffer == b"\x0A\x05hello\x10\x01\x18\x0A"
assert SearchRequest.read_from(BytesIO(buffer)) == request

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

pure_protobuf-3.1.4.tar.gz (17.3 kB view details)

Uploaded Source

Built Distribution

pure_protobuf-3.1.4-py3-none-any.whl (28.1 kB view details)

Uploaded Python 3

File details

Details for the file pure_protobuf-3.1.4.tar.gz.

File metadata

  • Download URL: pure_protobuf-3.1.4.tar.gz
  • Upload date:
  • Size: 17.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.2 CPython/3.12.3 Linux/6.8.0-1021-azure

File hashes

Hashes for pure_protobuf-3.1.4.tar.gz
Algorithm Hash digest
SHA256 5b2f91e4515215a03ede4ec9ee42c4f3147850d0bab495cf3f737669bae68043
MD5 0832a9cdaa70a1925bec587e281c0458
BLAKE2b-256 002f701496d8de8b315d0f297a64032caa7b75b6aaf6c7b97d8c45d22bd06293

See more details on using hashes here.

File details

Details for the file pure_protobuf-3.1.4-py3-none-any.whl.

File metadata

  • Download URL: pure_protobuf-3.1.4-py3-none-any.whl
  • Upload date:
  • Size: 28.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.2 CPython/3.12.3 Linux/6.8.0-1021-azure

File hashes

Hashes for pure_protobuf-3.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 ed6a0d924308f282dfac03aeb5481b168073456d7063e46c06af35b0ff0b0328
MD5 b5981bd619b7b84d321b9a697354fbb4
BLAKE2b-256 5ac2654110c9a4f03e19f9ee72718117d061795d3e35e8106a0592bcb0706fd3

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page