Auto-generated python files for protos with FileOptions/MessageOptions/FieldOptions don't have `DESCRIPTOR._options` set
What version of protobuf and what language are you using? Version: master/v3.6.0/v3.5.0 etc. Language: Python
What operating system (Linux, Windows, ...) and version? OSX 11.6.1
What runtime / compiler are you using (e.g., python version or gcc version) python 3.7
What did you do? Steps to reproduce the behavior:
metadata3.proto
syntax = "proto3";
import "google/protobuf/descriptor.proto";
package metas3;
message MessageOptionsMetadata3 {
optional string message_options_field1 = 1;
optional string message_options_field2 = 2;
optional string message_options_field3 = 3;
}
extend google.protobuf.MessageOptions {
MessageOptionsMetadata3 message_options_metadata3 = 50000;
}
message FileOptionsMetadata3 {
optional string file_options_field1 = 1;
optional string file_options_field2 = 2;
optional string file_options_field3 = 3;
optional string file_options_field4 = 4;
}
extend google.protobuf.FileOptions {
FileOptionsMetadata3 file_options_metadata3 = 60000;
}
extend google.protobuf.FieldOptions {
repeated string event_type = 70000;
}
event.proto
syntax = "proto3";
import "metadata3.proto";
package events;
option (metas3.file_options_metadata3).file_options_field1 = "file_option1";
option (metas3.file_options_metadata3).file_options_field2 = "file_option2";
message Event {
string id = 1;
string name = 2 [(metas3.event_type) = "sample_field_type1"];
string someData = 3;
option (metas3.message_options_metadata3).message_options_field1 = "placeholder1";
option (metas3.message_options_metadata3).message_options_field2 = "placeholder2";
}
event_pb2.py
# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: event.proto
"""Generated protocol buffer code."""
from google.protobuf import descriptor as _descriptor
from google.protobuf import message as _message
from google.protobuf import reflection as _reflection
from google.protobuf import symbol_database as _symbol_database
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
import metadata3_pb2 as metadata3__pb2
DESCRIPTOR = _descriptor.FileDescriptor(
name='event.proto',
package='events',
syntax='proto3',
serialized_options=b'\202\246\035\016\n\014file_option1\202\246\035\016\022\014file_option2',
create_key=_descriptor._internal_create_key,
serialized_pb=b'\n\x0b\x65vent.proto\x12\x06\x65vents\x1a\x0fmetadata3.proto\"q\n\x05\x45vent\x12\n\n\x02id\x18\x01 \x01(\t\x12$\n\x04name\x18\x02 \x01(\tB\x16\x82\x97\"\x12sample_field_type1\x12\x10\n\x08someData\x18\x03 \x01(\t:$\x82\xb5\x18\x0e\n\x0cplaceholder1\x82\xb5\x18\x0e\x12\x0cplaceholder2B$\x82\xa6\x1d\x0e\n\x0c\x66ile_option1\x82\xa6\x1d\x0e\x12\x0c\x66ile_option2b\x06proto3'
,
dependencies=[metadata3__pb2.DESCRIPTOR,])
_EVENT = _descriptor.Descriptor(
name='Event',
full_name='events.Event',
filename=None,
file=DESCRIPTOR,
containing_type=None,
create_key=_descriptor._internal_create_key,
fields=[
_descriptor.FieldDescriptor(
name='id', full_name='events.Event.id', index=0,
number=1, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=b"".decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
_descriptor.FieldDescriptor(
name='name', full_name='events.Event.name', index=1,
number=2, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=b"".decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=b'\202\227\"\022sample_field_type1', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
_descriptor.FieldDescriptor(
name='someData', full_name='events.Event.someData', index=2,
number=3, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=b"".decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
],
extensions=[
],
nested_types=[],
enum_types=[
],
serialized_options=b'\202\265\030\016\n\014placeholder1\202\265\030\016\022\014placeholder2',
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=40,
serialized_end=153,
)
DESCRIPTOR.message_types_by_name['Event'] = _EVENT
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
Event = _reflection.GeneratedProtocolMessageType('Event', (_message.Message,), {
'DESCRIPTOR' : _EVENT,
'__module__' : 'event_pb2'
# @@protoc_insertion_point(class_scope:events.Event)
})
_sym_db.RegisterMessage(Event)
DESCRIPTOR._options = None
_EVENT.fields_by_name['name']._options = None
_EVENT._options = None
# @@protoc_insertion_point(module_scope)
What did you expect to see Corresponding FileOptions/MessageOptions/FieldOptions set as applicable.
What did you see instead? DESCRIPTOR._options = None _EVENT.fields_by_name['name']._options = None _EVENT._options = None
Make sure you include information that can help us debug (full error message, exception listing, stack trace, logs).
Anything else we should know about your project / environment
it's been almost a year, perhaps a "me too" just to nudge this a bit
The DESCRIPTOR._options symbol is prefix-underscored and therefore internal to the implementation.
To get file options, you should use public APIs like DESCRIPTOR.GetOptions(): https://googleapis.dev/python/protobuf/latest/google/protobuf/descriptor.html#google.protobuf.descriptor.FileDescriptor.GetOptions
If you have a case where the public APIs are not returning the correct data, please open a new issue.