That would work to find the actual extension. That isn't the problem I am having (I can find the extension). The problem is that as an extension option, the message containing the option doesn't show it. For example if I do a text_format on the pb from inside the plugin I see this:
name: "Test" nested_type { name: "Nested" options { } } extension { name: "custom_option" extendee: ".google.protobuf.MessageOptions" number: 50000 label: LABEL_OPTIONAL type: TYPE_INT32 } So while it clearly shows an option was set, it isn't listing the option value of 5. What I need is to get that value. Note that I can figure out how to do this if I compile the .proto into Python and then hard code the specific types and look up the extension option that way. The problem is we wont know the types beforehand and must do this inside the protoc plugin as we process the .proto itself. On Friday, April 28, 2017 at 8:44:01 PM UTC-4, Josh Haberman wrote: > > Have you tried just using the FieldDescriptor? I suspect that will work, > as it's what some of our own code does. For example see: > > > https://github.com/google/protobuf/blob/master/python/google/protobuf/text_format.py#L819 > > On Monday, April 24, 2017 at 8:19:23 PM UTC-7, Robert Dyer wrote: >> >> I'm writing a protoc plugin for 2.5.0. My plugin is in Python. >> >> Given the following proto: >> >> import "google/protobuf/descriptor.proto"; >> >> message Test { >> extend google.protobuf.MessageOptions { >> optional int custom_option = 50000; >> } >> >> message Nested { >> option (custom_option) = 5; >> } >> } >> >> >> If I want, I can compile this to Python. Then in my plugin I can import >> that Test_pb2.py file and lookup the option: >> >> >> var.options.Extensions[Test.custom_option] >> >> >> This works fine. However, the problem I can't figure out is that I need >> to design the plugin so it works with *any* input file with *any* declared >> extension option. So I can't write my code as 'Test.custom_option' because >> I don't know beforehand what options will be declared. >> >> >> I can get the extension dynamically from the Descriptor.extension list. >> But this is a FieldDescriptorProto and to look up the extension in >> options.Extensions I need an 'extension handle'. I'm not sure what that is >> or how to get it. >> > -- You received this message because you are subscribed to the Google Groups "Protocol Buffers" group. To unsubscribe from this group and stop receiving emails from it, send an email to protobuf+unsubscr...@googlegroups.com. To post to this group, send email to protobuf@googlegroups.com. Visit this group at https://groups.google.com/group/protobuf. For more options, visit https://groups.google.com/d/optout.