Skip to main content

No project description provided

Project description

pyprotostuben

Generates Python MyPy stub modules from protobuf files.

usage

install

poetry add pyprotostuben

protoc-gen-pyprotostuben

a protoc plugin that generates MyPy stubs

features

  • choose message structure immutability / mutability
  • choose async / sync grpc module stubs
  • grpc servicer abstract methods have full signature (with appropriate type args in generics), thus it is easier to implement methods in IDE

flags

  • message-mutable -- add setters for fields, use mutable containers
  • message-all-init-args-optional -- each field is optional in message constructor (event if required)
  • grpc-sync -- use sync grpc stubs instead of grpc.aio module and async defs
  • grpc-skip-servicer -- don't generate code for servicers
  • grpc-skip-stub -- don't generate code for stubs

examples

requirements

project structure

  • /
    • src/
      • greeting.proto
        syntax = "proto3";
        
        package greeting;
        
        message GreetRequest {
          string name = 1;
        }
        
        message GreetResponse {
          string text = 1;
        }
        
        service Greeter {
          rpc Greet(GreetRequest) returns (GreetResponse) {}
        }
        
    • buf.yaml
      version: v1beta1
      build:
        roots:
          - src
      
    • buf.gen.yaml
      version: v1
      managed:
      enabled: true
      plugins:
      - plugin: pyprotostuben
        out: out
        strategy: all
      

run codegen

buf generate

output

src/greeting_pb2.pyi
import builtins
import google.protobuf.message
import typing

class GreetRequest(google.protobuf.message.Message):

    def __init__(self, *, name: builtins.str) -> None:...

    @builtins.property
    def name(self) -> builtins.str:...

    def HasField(self, field_name: typing.NoReturn) -> typing.NoReturn:...

    def WhichOneof(self, oneof_group: typing.NoReturn) -> typing.NoReturn:...

class GreetResponse(google.protobuf.message.Message):

    def __init__(self, *, text: builtins.str) -> None:...

    @builtins.property
    def text(self) -> builtins.str:...

    def HasField(self, field_name: typing.NoReturn) -> typing.NoReturn:...

    def WhichOneof(self, oneof_group: typing.NoReturn) -> typing.NoReturn:...
src/greeting_pb2_grpc.pyi
import abc
import builtins
import greeting_pb2
import grpc
import grpc.aio
import typing

class GreeterServicer(metaclass=abc.ABCMeta):

    @abc.abstractmethod
    async def Greet(self, request: greeting_pb2.GreetRequest, context: grpc.aio.ServicerContext[greeting_pb2.GreetRequest, greeting_pb2.GreetResponse]) -> greeting_pb2.GreetResponse:...

def add_GreeterServicer_to_server(servicer: GreeterServicer, server: grpc.aio.Server) -> None:...

class GreeterStub:

    def __init__(self, channel: grpc.aio.Channel) -> None:...

    def Greet(self, request: greeting_pb2.GreetRequest, *, timeout: typing.Optional[builtins.float]=None, metadata: typing.Optional[grpc.aio.MetadataType]=None, credentials: typing.Optional[grpc.CallCredentials]=None, wait_for_ready: typing.Optional[builtins.bool]=None, compression: typing.Optional[grpc.Compression]=None) -> grpc.aio.UnaryUnaryCall[greeting_pb2.GreetRequest, greeting_pb2.GreetResponse]:...

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

pyprotostuben-0.1.2.tar.gz (18.6 kB view details)

Uploaded Source

Built Distribution

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

pyprotostuben-0.1.2-py3-none-any.whl (27.4 kB view details)

Uploaded Python 3

File details

Details for the file pyprotostuben-0.1.2.tar.gz.

File metadata

  • Download URL: pyprotostuben-0.1.2.tar.gz
  • Upload date:
  • Size: 18.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.0 CPython/3.12.5

File hashes

Hashes for pyprotostuben-0.1.2.tar.gz
Algorithm Hash digest
SHA256 80dfb9ff663cd926693c31c30ef740a7a56f4db2f798f7ee0e669bb76b74345a
MD5 28dce58db7e513c7230f7a6467aca1ac
BLAKE2b-256 79f4bf5880e0cf1bbc8a76c6be5b1e844af55b11d1f3037b8890756b1c78a9fc

See more details on using hashes here.

File details

Details for the file pyprotostuben-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: pyprotostuben-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 27.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.0 CPython/3.12.5

File hashes

Hashes for pyprotostuben-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 edae73af0b83638f100cce11c09b4e9b77031a59416323e4b61e01758a99b861
MD5 34b87daa6d55122beb7191b696034505
BLAKE2b-256 32293c702e53835ed26cea8e9f459a6d9cee4483f339e45c2565f723bd2fa40b

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