Python gRPC + protobufs
Problem
You have .proto files defining protobufs and grpc services and you want Pants to generate Python code from them that you can use from a Python application.
Solution
Create python_grpc_library targets and use the gen goal to generate code from the .proto files. There is a codegen task grpcio-run, that uses Python's grpcio library https://grpc.io/ and generates python code from .proto files.
Usage
in a BUILD file near your proto files, create a python_grpcio_library target with your protos as a sources.
python_grpcio_library(
sources=['service.proto'],
dependencies=[
'3rdparty/python:protobuf',
]
)
Then, you can add a dependency on this target in your python binary's BUILD file dependencies section:
python_binary(
source='server.py',
dependencies=[
'src/protobuf/org/pantsbuild/example/grpcio/service',
],
)
Example:
An example Python gRPC client/server can be found in /examples/src/python/example/grpcio
to create a gRPC server execute
./pants run src/python/example/grpcio/server
and when server is running, run client example:
./pants run src/python/example/grpcio/client
generated code can be found as usual in pants output directory:
./pants.d/gen/grpcio-run/current/examples.src.protobuf.org.pantsbuild.example.service.service/current/org/pantsbuild/example/service