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 containersmessage-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 defsgrpc-skip-servicer-- don't generate code for servicersgrpc-skip-stub-- don't generate code for stubs
examples
requirements
- protoc
- buf CLI
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) {} }
- greeting.proto
- buf.yaml
version: v1beta1 build: roots: - src
- buf.gen.yaml
version: v1 managed: enabled: true plugins: - plugin: pyprotostuben out: out strategy: all
- src/
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
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
pyprotostuben-0.1.2.tar.gz
(18.6 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
80dfb9ff663cd926693c31c30ef740a7a56f4db2f798f7ee0e669bb76b74345a
|
|
| MD5 |
28dce58db7e513c7230f7a6467aca1ac
|
|
| BLAKE2b-256 |
79f4bf5880e0cf1bbc8a76c6be5b1e844af55b11d1f3037b8890756b1c78a9fc
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
edae73af0b83638f100cce11c09b4e9b77031a59416323e4b61e01758a99b861
|
|
| MD5 |
34b87daa6d55122beb7191b696034505
|
|
| BLAKE2b-256 |
32293c702e53835ed26cea8e9f459a6d9cee4483f339e45c2565f723bd2fa40b
|