在python中动态生成protobuf-rpc命令列表



你能给我建议吗,如何在python中获得可能的grpc调用(以及在调用中使用的对象(的列表?

更准确地说,假设我有一个原型:

service MyService {
rpc Command1(Command1Request) returns (Command1Response);
rpc Command2(Command2Request) returns (Command2Response);
...
rpc CommandX(CommandXRequest) returns (CommandXResponse);
}
message Command1Request {
uint64 param1 = 2;
}

我想要的是使用控制台实用程序生成protobuf。我有argparse,希望能够为我的实用程序动态生成命令列表:

my_utility --Command1 --param1 <value>
my_utility --Command2 --param2 <value>
... 

现在我使用dir((方法来获取对象列表,因此修复了protobuf的特殊命名约定:如果我有"Command2Response",那么我的调用对象是"Command2Request",调用请求方法是"Command2"。

是否有更正确的方法来获取可能调用的列表(命名约定太容易出现人为错误(?

看起来您正在gRPC Python中寻找服务器反射?

https://github.com/grpc/grpc/blob/master/doc/server-reflection.md

最近在此处添加了gRPC Python反射文档:https://github.com/grpc/grpc/blob/master/doc/python/server_reflection.md

示例如下:https://github.com/grpc/grpc/blob/master/examples/python/helloworld/greeter_server_with_reflection.py

假设这个protobuf生成的python代码是您的实用工具的一部分,您可以通过protobuf描述符获得.proto文件中定义的所有类型信息。例如:https://github.com/google/protobuf/blob/master/python/google/protobuf/internal/descriptor_test.py#L635

在您的情况下,它将类似于:

service_descriptor=your_proto_pb2.descriptor.services_by_name['MyService']

一旦您有了服务描述符,您就可以获得该服务中定义的rpc方法列表、这些方法中使用的请求/响应类型等等。请参阅:https://github.com/google/protobuf/blob/master/python/google/protobuf/descriptor.py#L748

最新更新