| Index: third_party/protobuf/python/google/protobuf/descriptor.py
|
| diff --git a/third_party/protobuf/python/google/protobuf/descriptor.py b/third_party/protobuf/python/google/protobuf/descriptor.py
|
| index 3209b34d57d8da1d45bc9e5a457241603b7d2610..e1f2e3b7c9497bc33801450c562d4a150b691720 100755
|
| --- a/third_party/protobuf/python/google/protobuf/descriptor.py
|
| +++ b/third_party/protobuf/python/google/protobuf/descriptor.py
|
| @@ -171,13 +171,6 @@ class _NestedDescriptorBase(DescriptorBase):
|
| self._serialized_start = serialized_start
|
| self._serialized_end = serialized_end
|
|
|
| - def GetTopLevelContainingType(self):
|
| - """Returns the root if this is a nested type, or itself if its the root."""
|
| - desc = self
|
| - while desc.containing_type is not None:
|
| - desc = desc.containing_type
|
| - return desc
|
| -
|
| def CopyToProto(self, proto):
|
| """Copies this to the matching proto in descriptor_pb2.
|
|
|
| @@ -258,7 +251,7 @@ class Descriptor(_NestedDescriptorBase):
|
| def __new__(cls, name, full_name, filename, containing_type, fields,
|
| nested_types, enum_types, extensions, options=None,
|
| is_extendable=True, extension_ranges=None, oneofs=None,
|
| - file=None, serialized_start=None, serialized_end=None,
|
| + file=None, serialized_start=None, serialized_end=None, # pylint: disable=redefined-builtin
|
| syntax=None):
|
| _message.Message._CheckCalledFromGeneratedFile()
|
| return _message.default_pool.FindMessageTypeByName(full_name)
|
| @@ -269,8 +262,8 @@ class Descriptor(_NestedDescriptorBase):
|
| def __init__(self, name, full_name, filename, containing_type, fields,
|
| nested_types, enum_types, extensions, options=None,
|
| is_extendable=True, extension_ranges=None, oneofs=None,
|
| - file=None, serialized_start=None, serialized_end=None,
|
| - syntax=None): # pylint:disable=redefined-builtin
|
| + file=None, serialized_start=None, serialized_end=None, # pylint: disable=redefined-builtin
|
| + syntax=None):
|
| """Arguments to __init__() are as described in the description
|
| of Descriptor fields above.
|
|
|
| @@ -349,7 +342,7 @@ class Descriptor(_NestedDescriptorBase):
|
| Args:
|
| proto: An empty descriptor_pb2.DescriptorProto.
|
| """
|
| - # This function is overriden to give a better doc comment.
|
| + # This function is overridden to give a better doc comment.
|
| super(Descriptor, self).CopyToProto(proto)
|
|
|
|
|
| @@ -497,7 +490,7 @@ class FieldDescriptor(DescriptorBase):
|
| def __new__(cls, name, full_name, index, number, type, cpp_type, label,
|
| default_value, message_type, enum_type, containing_type,
|
| is_extension, extension_scope, options=None,
|
| - has_default_value=True, containing_oneof=None):
|
| + has_default_value=True, containing_oneof=None, json_name=None):
|
| _message.Message._CheckCalledFromGeneratedFile()
|
| if is_extension:
|
| return _message.default_pool.FindExtensionByName(full_name)
|
| @@ -507,7 +500,7 @@ class FieldDescriptor(DescriptorBase):
|
| def __init__(self, name, full_name, index, number, type, cpp_type, label,
|
| default_value, message_type, enum_type, containing_type,
|
| is_extension, extension_scope, options=None,
|
| - has_default_value=True, containing_oneof=None):
|
| + has_default_value=True, containing_oneof=None, json_name=None):
|
| """The arguments are as described in the description of FieldDescriptor
|
| attributes above.
|
|
|
| @@ -519,6 +512,10 @@ class FieldDescriptor(DescriptorBase):
|
| self.name = name
|
| self.full_name = full_name
|
| self._camelcase_name = None
|
| + if json_name is None:
|
| + self.json_name = _ToJsonName(name)
|
| + else:
|
| + self.json_name = json_name
|
| self.index = index
|
| self.number = number
|
| self.type = type
|
| @@ -626,7 +623,7 @@ class EnumDescriptor(_NestedDescriptorBase):
|
| Args:
|
| proto: An empty descriptor_pb2.EnumDescriptorProto.
|
| """
|
| - # This function is overriden to give a better doc comment.
|
| + # This function is overridden to give a better doc comment.
|
| super(EnumDescriptor, self).CopyToProto(proto)
|
|
|
|
|
| @@ -665,7 +662,7 @@ class EnumValueDescriptor(DescriptorBase):
|
| self.type = type
|
|
|
|
|
| -class OneofDescriptor(object):
|
| +class OneofDescriptor(DescriptorBase):
|
| """Descriptor for a oneof field.
|
|
|
| name: (str) Name of the oneof field.
|
| @@ -682,12 +679,15 @@ class OneofDescriptor(object):
|
| if _USE_C_DESCRIPTORS:
|
| _C_DESCRIPTOR_CLASS = _message.OneofDescriptor
|
|
|
| - def __new__(cls, name, full_name, index, containing_type, fields):
|
| + def __new__(
|
| + cls, name, full_name, index, containing_type, fields, options=None):
|
| _message.Message._CheckCalledFromGeneratedFile()
|
| return _message.default_pool.FindOneofByName(full_name)
|
|
|
| - def __init__(self, name, full_name, index, containing_type, fields):
|
| + def __init__(
|
| + self, name, full_name, index, containing_type, fields, options=None):
|
| """Arguments are as described in the attribute description above."""
|
| + super(OneofDescriptor, self).__init__(options, 'OneofOptions')
|
| self.name = name
|
| self.full_name = full_name
|
| self.index = index
|
| @@ -705,11 +705,22 @@ class ServiceDescriptor(_NestedDescriptorBase):
|
| definition appears withing the .proto file.
|
| methods: (list of MethodDescriptor) List of methods provided by this
|
| service.
|
| + methods_by_name: (dict str -> MethodDescriptor) Same MethodDescriptor
|
| + objects as in |methods_by_name|, but indexed by "name" attribute in each
|
| + MethodDescriptor.
|
| options: (descriptor_pb2.ServiceOptions) Service options message or
|
| None to use default service options.
|
| file: (FileDescriptor) Reference to file info.
|
| """
|
|
|
| + if _USE_C_DESCRIPTORS:
|
| + _C_DESCRIPTOR_CLASS = _message.ServiceDescriptor
|
| +
|
| + def __new__(cls, name, full_name, index, methods, options=None, file=None, # pylint: disable=redefined-builtin
|
| + serialized_start=None, serialized_end=None):
|
| + _message.Message._CheckCalledFromGeneratedFile() # pylint: disable=protected-access
|
| + return _message.default_pool.FindServiceByName(full_name)
|
| +
|
| def __init__(self, name, full_name, index, methods, options=None, file=None,
|
| serialized_start=None, serialized_end=None):
|
| super(ServiceDescriptor, self).__init__(
|
| @@ -718,16 +729,14 @@ class ServiceDescriptor(_NestedDescriptorBase):
|
| serialized_end=serialized_end)
|
| self.index = index
|
| self.methods = methods
|
| + self.methods_by_name = dict((m.name, m) for m in methods)
|
| # Set the containing service for each method in this service.
|
| for method in self.methods:
|
| method.containing_service = self
|
|
|
| def FindMethodByName(self, name):
|
| """Searches for the specified method, and returns its descriptor."""
|
| - for method in self.methods:
|
| - if name == method.name:
|
| - return method
|
| - return None
|
| + return self.methods_by_name.get(name, None)
|
|
|
| def CopyToProto(self, proto):
|
| """Copies this to a descriptor_pb2.ServiceDescriptorProto.
|
| @@ -735,7 +744,7 @@ class ServiceDescriptor(_NestedDescriptorBase):
|
| Args:
|
| proto: An empty descriptor_pb2.ServiceDescriptorProto.
|
| """
|
| - # This function is overriden to give a better doc comment.
|
| + # This function is overridden to give a better doc comment.
|
| super(ServiceDescriptor, self).CopyToProto(proto)
|
|
|
|
|
| @@ -754,6 +763,14 @@ class MethodDescriptor(DescriptorBase):
|
| None to use default method options.
|
| """
|
|
|
| + if _USE_C_DESCRIPTORS:
|
| + _C_DESCRIPTOR_CLASS = _message.MethodDescriptor
|
| +
|
| + def __new__(cls, name, full_name, index, containing_service,
|
| + input_type, output_type, options=None):
|
| + _message.Message._CheckCalledFromGeneratedFile() # pylint: disable=protected-access
|
| + return _message.default_pool.FindMethodByName(full_name)
|
| +
|
| def __init__(self, name, full_name, index, containing_service,
|
| input_type, output_type, options=None):
|
| """The arguments are as described in the description of MethodDescriptor
|
| @@ -788,6 +805,7 @@ class FileDescriptor(DescriptorBase):
|
| message_types_by_name: Dict of message names of their descriptors.
|
| enum_types_by_name: Dict of enum names and their descriptors.
|
| extensions_by_name: Dict of extension names and their descriptors.
|
| + services_by_name: Dict of services names and their descriptors.
|
| pool: the DescriptorPool this descriptor belongs to. When not passed to the
|
| constructor, the global default pool is used.
|
| """
|
| @@ -825,6 +843,7 @@ class FileDescriptor(DescriptorBase):
|
|
|
| self.enum_types_by_name = {}
|
| self.extensions_by_name = {}
|
| + self.services_by_name = {}
|
| self.dependencies = (dependencies or [])
|
| self.public_dependencies = (public_dependencies or [])
|
|
|
| @@ -872,6 +891,31 @@ def _ToCamelCase(name):
|
| return ''.join(result)
|
|
|
|
|
| +def _OptionsOrNone(descriptor_proto):
|
| + """Returns the value of the field `options`, or None if it is not set."""
|
| + if descriptor_proto.HasField('options'):
|
| + return descriptor_proto.options
|
| + else:
|
| + return None
|
| +
|
| +
|
| +def _ToJsonName(name):
|
| + """Converts name to Json name and returns it."""
|
| + capitalize_next = False
|
| + result = []
|
| +
|
| + for c in name:
|
| + if c == '_':
|
| + capitalize_next = True
|
| + elif capitalize_next:
|
| + result.append(c.upper())
|
| + capitalize_next = False
|
| + else:
|
| + result += c
|
| +
|
| + return ''.join(result)
|
| +
|
| +
|
| def MakeDescriptor(desc_proto, package='', build_file_if_cpp=True,
|
| syntax=None):
|
| """Make a protobuf Descriptor given a DescriptorProto protobuf.
|
| @@ -948,6 +992,10 @@ def MakeDescriptor(desc_proto, package='', build_file_if_cpp=True,
|
| full_name = '.'.join(full_message_name + [field_proto.name])
|
| enum_desc = None
|
| nested_desc = None
|
| + if field_proto.json_name:
|
| + json_name = field_proto.json_name
|
| + else:
|
| + json_name = None
|
| if field_proto.HasField('type_name'):
|
| type_name = field_proto.type_name
|
| full_type_name = '.'.join(full_message_name +
|
| @@ -962,10 +1010,11 @@ def MakeDescriptor(desc_proto, package='', build_file_if_cpp=True,
|
| field_proto.number, field_proto.type,
|
| FieldDescriptor.ProtoTypeToCppProtoType(field_proto.type),
|
| field_proto.label, None, nested_desc, enum_desc, None, False, None,
|
| - options=field_proto.options, has_default_value=False)
|
| + options=_OptionsOrNone(field_proto), has_default_value=False,
|
| + json_name=json_name)
|
| fields.append(field)
|
|
|
| desc_name = '.'.join(full_message_name)
|
| return Descriptor(desc_proto.name, desc_name, None, None, fields,
|
| list(nested_types.values()), list(enum_types.values()), [],
|
| - options=desc_proto.options)
|
| + options=_OptionsOrNone(desc_proto))
|
|
|