vmagamedov / grpclib

Pure-Python gRPC implementation for asyncio
http://grpclib.readthedocs.io
BSD 3-Clause "New" or "Revised" License
936 stars 92 forks source link

Feature: "M" module mapping option #160

Open pcj opened 2 years ago

pcj commented 2 years ago

The plugin maps proto filenames to python module names in a predicable manner according to _type_names and other functions. This results in import statements like:

from google.protobuf.descriptor_pb2 import FileDescriptorProto, DescriptorProto

In our case as an artifact of the build system (bazel), the well-known types (and some other types) have alternate desired module name mappings. The desired import would be something like:

from protobufapis.google.protobuf.descriptor_pb2 import FileDescriptorProto, DescriptorProto

I would suggest a "mapping" option that allows the end-user to do such a mapping. Other protoc plugins have the same requirement. For protoc-gen-go, for example, has the M option.

For example:

--grpclib_opt=M=google/protobuf/duration.proto=protobufapis.google.protobuf.duration

Would parse the option, do a lookup in the type map, and produce the output:

from protobufapis.google.protobuf.descriptor_pb2 import FileDescriptorProto, DescriptorProto

Happy to create a PR to implement it, and thanks for the great plugin!

vmagamedov commented 2 years ago

It would be great to have this option. Looking forward to review and merge your PR.