Skip to main content

Generate Python MyPy stub modules from protobuf files.

Project description

pyprotostuben

Python Supported versions MyPy Strict Test Coverage Downloads GitHub stars

Generate Python MyPy stub modules from protobuf files.

usage

install into dev dependencies group

poetry add --group dev 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.3.tar.gz (20.0 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.3-py3-none-any.whl (28.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: pyprotostuben-0.1.3.tar.gz
  • Upload date:
  • Size: 20.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for pyprotostuben-0.1.3.tar.gz
Algorithm Hash digest
SHA256 0c4c7428a4d0898c24b2349160156c71325d785090d47b30c2c6c6e6e6117dcb
MD5 84a6d3f580429207a5439c5e2d3fa09c
BLAKE2b-256 81bb43208ddb2ae9f96812d35f95fa736cb2b63b5f471bf0bc7c41aeeedc5036

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyprotostuben-0.1.3.tar.gz:

Publisher: publish.yaml on zerlok/pyprotostuben

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

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

File metadata

  • Download URL: pyprotostuben-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 28.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for pyprotostuben-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 2aff2c8ce460ecec02bbf6962a8b5a18551480502db341cb72a53046e0a21593
MD5 ee1adf1c30217d261f1fe788c662233e
BLAKE2b-256 25702043fb568969b42aa70ad427e32fa0f8b055415b16f543f51b2342531e16

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyprotostuben-0.1.3-py3-none-any.whl:

Publisher: publish.yaml on zerlok/pyprotostuben

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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