Protocol Buffers using Python type annotations
Project Links
Meta
Author: Pavel Perestoronin
Requires Python: >=3.9.0,<4.0.0
Classifiers
Development Status
- 5 - Production/Stable
Intended Audience
- Developers
License
- OSI Approved :: MIT License
Operating System
- OS Independent
Programming Language
- Python :: 3
- Python :: 3.9
- Python :: 3.10
- Python :: 3.11
- Python :: 3.12
- Python :: 3.13
- Python :: 3 :: Only
Topic
- Software Development :: Libraries
- Software Development :: Libraries :: Python Modules
Typing
- Typed
pure-protobuf
Wow! Such annotated! Very buffers!
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
3.1.5
Sep 02, 2025
3.1.4
Apr 02, 2025
3.1.3
Oct 15, 2024
3.1.2
Aug 16, 2024
3.1.1
Jul 22, 2024
3.1.0
Apr 22, 2024
3.0.1
Mar 01, 2024
3.0.0
Nov 29, 2023
3.0.0rc1
Sep 27, 2023
3.0.0a5
May 11, 2023
3.0.0a4
May 10, 2023
3.0.0a3
Apr 25, 2023
3.0.0a2
Apr 25, 2023
3.0.0a1
Mar 04, 2023
2.3.0
May 02, 2023
2.2.3
Feb 15, 2023
2.2.2
Feb 07, 2023
2.2.1
Jan 25, 2023
2.2.0
Dec 21, 2022
2.1.1
Oct 06, 2022
2.1.0
Jan 17, 2022
2.0.1
Sep 13, 2020
2.0.0
Nov 04, 2019
1.2.0
Jul 02, 2019
1.1.0
Apr 24, 2019
1.0.1
Apr 16, 2019
1.0.0
Mar 31, 2019
0.5.0
Mar 13, 2019
0.4.1
Jan 08, 2019
0.4.0
Dec 15, 2018