如何在python中动态膨胀protobuf对象?

时间:2017-05-12 19:52:46

标签: python protocol-buffers

我正在访问提供1)protobuf架构和2)给定protobuf消息的二进制数据的Web服务。 protobuf模式以ZIP格式检索,并包含一个.proto文件,其大致定义为:

message FooMessage {
  //stuff
  ... 
}

//other .proto fun... 

一旦我获取了.proto文件,我就编译它:

protoc --python_out=. path/to/message

然后我导入模块:

module = importlib.import_module(libName, package=pkg)

下一步是去获取给定对象的二进制数据。我这样做并将其存储为data = io.BytesIO对象。

所以现在我想用我在.proto文件中定义的获取的二进制数据来扩充FooMessage对象,ala:

obj = module.FooMessage(data) 

问题:

  1. 如何从FooMessage中检索module班级名称 我已经导入了以便我可以动态构建对象吗?
  2. 即使我"作弊"并查看单个.proto文件的编译代码,我没有看到传递二进制数据以夸大FooMessage_pb2.py对象的明显方法。似乎没有一种方法可以接受二进制数据来实例化对象ala:obj = module.FooMessage(data)
  3. 显然,我是以错误的方式做/思考这个问题。我非常感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

对于#1,它们在模式中包含类名。我错过了它。

嗯,对于#2,我只需要使用文档中没有立即明显的module.FooMessage.FromString(data)方法。