A tool for converting between Pydantic models and Protobuf messages, specifically enabling the generation of Pydantic BaseModel classes from .proto files.
Project description
protobuf-pydantic-gen
A tool for converting between Pydantic models and Protobuf messages, enabling the generation of Pydantic BaseModel
classes from .proto
files.
Features
- Supports conversion of Protobuf basic types to Python basic types.
- Converts Protobuf definition language to Pydantic
BaseModel
classes. - Converts Protobuf definition language to
sqlmodel
ORM models. - Implements
to_protobuf
andfrom_protobuf
methods forBaseModel
classes, facilitating bidirectional conversion between Pydantic models and Protobuf messages. - Allows specifying
Pydantic BaseModel Field
parameters in Protobuf descriptor files.
Installation
pip install protobuf-pydantic-gen
Example
syntax = "proto3";
import "google/protobuf/descriptor.proto";
import "protobuf_pydantic_gen/pydantic.proto";
import "google/protobuf/timestamp.proto";
import "google/protobuf/any.proto";
import "constant.proto";
import "example2.proto";
package pydantic_example;
message Nested {
string name = 1[(pydantic.field) = {description: "Name of the example",example: "'ohn Doe",alias: "full_name",default: "John Doe",max_length:128,primary_key:true}];
}
message Example {
option (pydantic.database) = {
as_table: true
table_name: "users",
compound_index:{
indexs:["name","age"],
index_type:"UNIQUE",
name:"uni_name_age"
},
compound_index:{
indexs:["name"],
index_type:"PRIMARY",
name:"index_name"
}
};
string name = 1[(pydantic.field) = {description: "Name of the example",alias: "full_name",default: "John Doe",max_length:128,primary_key:true}];
optional int32 age = 2 [(pydantic.field) = {description: "Age of the example",alias: "years",default: "30"}];
repeated string emails = 3 [(pydantic.field) = {description: "Emails of the example",default:"[]"}];
repeated Example2 examples = 9 [(pydantic.field) = {description: "Nested message",sa_column_type:"JSON"}];
map<string, google.protobuf.Any> entry = 4 [(pydantic.field) = {description: "Properties of the example",default:"{}"}];
Nested nested=8[(pydantic.field) = {description: "Nested message",sa_column_type:"JSON"}];
google.protobuf.Timestamp created_at = 5 [(pydantic.field) = {description: "Creation date of the example",default: "datetime.datetime.now()",required: true}];
ExampleType type = 6 [(pydantic.field) = {description: "Type of the example",default: "ExampleType.TYPE1",sa_column_type:"Enum[ExampleType]"}];
float score = 7 [(pydantic.field) = {description: "Score of the example",default: "0.0",gt: 0.0,le: 100.0,field_type: "Integer"}];
}
Usage
python3 -m grpc_tools.protoc --proto_path=./protos -I=./protos -I=./ \
--python_out=./pb --pyi_out=./pb --grpc_python_out=./pb --pydantic_out=./models \
"./protos/example.proto"
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file protobuf_pydantic_gen-0.1.4.post1.tar.gz
.
File metadata
- Download URL: protobuf_pydantic_gen-0.1.4.post1.tar.gz
- Upload date:
- Size: 18.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | bc269d206bdbd9a698fbf0ad919ec96ee3b73b4b3097501d5643c69f2d3a31e4 |
|
MD5 | 6a078a6020e476ec38ecd74088d4149b |
|
BLAKE2b-256 | 279eeb7d1827a6933573c7a79602a6a4ba0ac1dc333aeb6df40b8b484a34c14d |
File details
Details for the file protobuf_pydantic_gen-0.1.4.post1-py3-none-any.whl
.
File metadata
- Download URL: protobuf_pydantic_gen-0.1.4.post1-py3-none-any.whl
- Upload date:
- Size: 20.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2d2ff7602f50610472ba1aa2a24b43d34470ebe4e59da48e2ad8d187270a17b6 |
|
MD5 | 1ff827e6f1536313c7247c4e95c3326c |
|
BLAKE2b-256 | b8d08730832a757e0d9cb0d99d3b5e79989f6a232240369420f4b0489067935d |