У меня есть прото-сообщение, что мне нужно прикрепить строку, содержащую информацию о данных (единицы измерения, коэффициент масштабирования и т. Д. 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:
Как видите, мои пользовательские поля не печатаются. Не могли бы вы помочь мне распечатать пользовательские параметры.
С уважением