Python: печать всех параметров поля Protocol Buffer - PullRequest
1 голос
/ 14 января 2020

У меня есть прото-сообщение, что мне нужно прикрепить строку, содержащую информацию о данных (единицы измерения, коэффициент масштабирования и т. Д. c). Я использую пользовательские опции в соответствии с proto2 гидом . Я также пытался следовать предыдущему вопросу, где они печатали пользовательские опции для 1 сообщения здесь . Я хотел бы распечатать все поля из сообщения вдоль строки. Я изо всех сил пытался найти решение, пока что я попробовал:

В моем файле .proto: служебное сообщение содержит поля, которые сами являются сообщениями, такими как My_Message.

import "google/protobuf/descriptor.proto";

extend google.protobuf.FieldOptions {
   optional string formatting_stuff = 50000;
}

message My_Message
{
    optional uint32 base_frequency_hz = 1 [(formatting_stuff) = "test"];
    optional float trigger_frequency_hz = 2 [(formatting_stuff) = "test2"];
    ...
}

message Service
{
    optional My_Message x = 13;
    ...
}

Затем в файле python как будет проходить итерация по каждому полю в Service и вложенному сообщению My_Message, чтобы получить как его значение, так и затем извлечь 'formatting_stuff'.

Это моя попытка, но я не могу получить параметры поля для печати пользовательских параметров:

messanger.py

   ...
   rsp = self.proto.Service().FromString(self.data)

   desc = protobuf_file.Service.My_Message.DESCRIPTOR
   for rsp_field in response.DESCRIPTOR.fields:
       print("Response Field  name: ", rsp_field.name)
       print("Response Field  value: ", getattr(rsp, rsp_field.name))

       options = desc.GetOptions()
       formatting = options.Extensions[protobuf_file.formatting_stuff]
       print("Response Field formatting: ", formatting)

вывод терминала:

Response Field  name:  base_frequency_hz 
Response Field  value:  720000
Response Field formatting:

Response Field  name:  trigger_frequency_hz 
Response Field  value:  3000.0
Response Field formatting:

Как видите, мои пользовательские поля не печатаются. Не могли бы вы помочь мне распечатать пользовательские параметры.

С уважением

...