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

Uploaded Source

Built Distribution

protobuf_pydantic_gen-0.1.6-py3-none-any.whl (20.2 kB view details)

Uploaded Python 3

File details

Details for the file protobuf_pydantic_gen-0.1.6.tar.gz.

File metadata

File hashes

Hashes for protobuf_pydantic_gen-0.1.6.tar.gz
Algorithm Hash digest
SHA256 b11c7b469a5a815b78bc9f7cf5c131df54cc3059670aba2cdf6cd77fa7866afa
MD5 8ee648021b99d6926a393b72fcccfcbd
BLAKE2b-256 b10055733ab8ac2821779a6c138b7d90a7211e2ee162b1f2b19221114b25238a

See more details on using hashes here.

File details

Details for the file protobuf_pydantic_gen-0.1.6-py3-none-any.whl.

File metadata

File hashes

Hashes for protobuf_pydantic_gen-0.1.6-py3-none-any.whl
Algorithm Hash digest
SHA256 94c91593b11c643a5bbdf7a39a0634e912382798c471b8119a473326df9e42ad
MD5 9298220ad7864de2783801b9900f20ce
BLAKE2b-256 9377852d671a88723a291a5b4b91cd7a334ed51fe0b5a4c61eef901c0b405316

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