前に書いたこれについて、不用意にもう一台セットアップして、動作確認にgetrib.pyを呼び出したところ、python例外を吐いてしまいました。
google.protobufのversionが違っていたのが原因でないかと考えてます。
$ python -c"import google.protobuf;print google.protobuf.__version__" 3.2.0 $
前の記事で、試したファイルを一時的にforkして修正例を
https://github.com/ng-labo/gobgp_grpc_demo/blob/master/getrib.py
あげたのですが、もう少しエレガントに書けそうな(python protobuf が変わる?)気もするので、要追跡です。
この修正の結果は前とまったく同じ結果が得られていません。gobgp.protoで定義しているPathの項目のうちとれていない項目があります。その具体的原因は詳細な部分になってしまいますが、簡単には、実行後の値の取得をListFields()というメソッドの結果をもとにしてますが、このリストの項目に入ってきていない項目があるからです。is_from_external、is_withdrawとかの項目が表示されなくなっています。
よりプログラマーフレンドリーにしようとしているgoogle.protobufの気持ちがある気がしますが、いまのところ値がないのか隠された項目についてはデフォルト値を用意してあげるとかしない現状です。というかこのあたりかなり自信ない現状です。
(2/19追記) grpcのstubを取得するメソッドに正式版(not beta)がになっていてそこでは
greeter_server.py/greeter_client.pyのサンプルをみるとどうすべきかわかりました。
つまりgoogle.protobufのほうでなくgrpcが支配的な要因だと思います。protobufは入れ物だと思ってそう書いてました。
それでも、送信元で設定されない項目は参照でno attributeエラーは起きないけど値の設定もないようです。