Skip to main content

A tool for converting between Pydantic models and Protobuf messages, specifically enabling the generation of Pydantic BaseModel classes from .proto files.

Project description

English|简体中文

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 and from_protobuf methods for BaseModel 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

protobuf_pydantic_gen-0.1.4.post1.tar.gz (18.0 kB view details)

Uploaded Source

Built Distribution

File details

Details for the file protobuf_pydantic_gen-0.1.4.post1.tar.gz.

File metadata

File hashes

Hashes for protobuf_pydantic_gen-0.1.4.post1.tar.gz
Algorithm Hash digest
SHA256 bc269d206bdbd9a698fbf0ad919ec96ee3b73b4b3097501d5643c69f2d3a31e4
MD5 6a078a6020e476ec38ecd74088d4149b
BLAKE2b-256 279eeb7d1827a6933573c7a79602a6a4ba0ac1dc333aeb6df40b8b484a34c14d

See more details on using hashes here.

File details

Details for the file protobuf_pydantic_gen-0.1.4.post1-py3-none-any.whl.

File metadata

File hashes

Hashes for protobuf_pydantic_gen-0.1.4.post1-py3-none-any.whl
Algorithm Hash digest
SHA256 2d2ff7602f50610472ba1aa2a24b43d34470ebe4e59da48e2ad8d187270a17b6
MD5 1ff827e6f1536313c7247c4e95c3326c
BLAKE2b-256 b8d08730832a757e0d9cb0d99d3b5e79989f6a232240369420f4b0489067935d

See more details on using hashes here.

Supported by

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