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.5.tar.gz (17.4 kB view details)

Uploaded Source

Built Distribution

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

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

Uploaded Python 3

File details

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

File metadata

  • Download URL: pure_protobuf-3.1.5.tar.gz
  • Upload date:
  • Size: 17.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.4 CPython/3.12.3 Linux/6.11.0-1018-azure

File hashes

Hashes for pure_protobuf-3.1.5.tar.gz
Algorithm Hash digest
SHA256 2e33554cbe2e664a099546f6fd1d6130e409df2d7a8c68b6ee9ce56f4c5d6dfc
MD5 25019b33ffad672962ddc76518199407
BLAKE2b-256 11492bbc64c052c63a63ba5c9af561734e8e5c6e440b1ce325617fca4b5ecea6

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for pure_protobuf-3.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 a7e9f57522d6e6f04f683cb4cded4eecfb18a1912b5a4aaed1745c1265f5620a
MD5 d132241a88c5de428e294aec11361ac3
BLAKE2b-256 f4efcad3d78e86f75a56e64d238d73393d37cf5c874d31819735ae2dba35e4b3

See more details on using hashes here.

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