Я пытаюсь написать плагин protoc, который требует от меня использования пользовательских параметров. Я определил свой собственный параметр, как показано в примере (https://developers.google.com/protocol-buffers/docs/proto#customoptions):
import "google/protobuf/descriptor.proto";
extend google.protobuf.MessageOptions {
string my_option = 51234;
}
Я использую его следующим образом:
message Hello {
bool greeting = 1;
string name = 2;
int32 number = 3;
option (my_option) = "telephone";
}
Однако, когда я читаю проанализированный запрос, поле параметров пусто для сообщения «Привет».
Я делаю следующее, чтобы прочитать
data = sys.stdin.read()
request = plugin.CodeGeneratorRequest()
request.ParseFromString(data)
Когда я печатаю «запрос», он просто дает мне это
message_type {
name: "Hello"
field {
name: "greeting"
number: 1
label: LABEL_REQUIRED
type: TYPE_BOOL
json_name: "greeting"
}
field {
name: "name"
number: 2
label: LABEL_REQUIRED
type: TYPE_STRING
json_name: "name"
}
field {
name: "number"
number: 3
label: LABEL_OPTIONAL
type: TYPE_INT32
json_name: "number"
}
options {
}
}
Как видно, поле параметров пусто, хотя я определил параметры в своем файле .proto. Является ли мой синтаксис неправильным для определения пользовательских параметров? Или это может быть проблема с моей версией protoc?
d = msg.DESCRIPTOR.GetOptions().Extensions
где msg — это сообщение в моем прото-файле - person staleMilk   schedule 05.07.2017my_proto_file_pb2.my_option
выдает ошибкуAttributeError: 'FileDescriptorProto' object has no attribute 'my_option'
. Нужно ли использовать файлы, сгенерированные протоколом, для доступа к расширениям? @МаркГравелл - person staleMilk   schedule 05.07.2017