2017-05-12 4 views
1

私は1)protobufスキーマと2)与えられたprotobufメッセージのバイナリデータを提供するWebサービスにアクセスしています。いるProtobufスキーマは、ZIP形式で取得し、として大まかに定義され.protoファイルが含まれている:私はそれをコンパイル、.protoファイルをフェッチしたらPythonでprotobufオブジェクトを動的に拡張するにはどうすればよいですか?

message FooMessage { 
    //stuff 
    ... 
} 

//other .proto fun... 

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オブジェクトを膨張させる明白な方法はありません。

obj = module.FooMessage(data)は、明らかに私は間違った方法でこれを考える/やってる:オブジェクトALAをインスタンス化するバイナリデータに取る方法があるように思えません。私は大いに助けに感謝します。

+0

あなたが何を求めているのかわかりません。これらのスキーマに準拠したスキーマ、データがあります。どうしたの? – user1685095

+0

私は_pb2.pyクラスにコンパイルした.protoファイルを取り出します。 – jdt141

+0

はそのコメントを無視します。私は明確にするために質問を編集しました。 – jdt141

答えて

0

#1の場合、スキーマにクラス名が含まれています。私はちょうどそれを逃した。

#2の場合は、module.FooMessage.FromString(data)メソッドを使用するだけで済みます。このメソッドは、ドキュメントですぐにはわかりませんでした。

関連する問題