descriptor.py revision 5821806d5e7f356e8fa4b058a389a808ea183019
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Protocol Buffers - Google's data interchange format 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Copyright 2008 Google Inc. All rights reserved. 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# http://code.google.com/p/protobuf/ 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Redistribution and use in source and binary forms, with or without 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# modification, are permitted provided that the following conditions are 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# met: 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# * Redistributions of source code must retain the above copyright 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# notice, this list of conditions and the following disclaimer. 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# * Redistributions in binary form must reproduce the above 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# copyright notice, this list of conditions and the following disclaimer 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# in the documentation and/or other materials provided with the 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# distribution. 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# * Neither the name of Google Inc. nor the names of its 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# contributors may be used to endorse or promote products derived from 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# this software without specific prior written permission. 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)"""Descriptors essentially contain exactly the information found in a .proto 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)file, in types that make this information accessible in Python. 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)""" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)__author__ = 'robinson@google.com (Will Robinson)' 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)from google.protobuf.internal import api_implementation 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if api_implementation.Type() == 'cpp': 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) from google.protobuf.internal import cpp_message 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Error(Exception): 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Base error for this module.""" 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DescriptorBase(object): 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Descriptors base class. 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) This class is the base of all descriptor classes. It provides common options 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) related functionaility. 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Attributes: 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) has_options: True if the descriptor has non-default options. Usually it 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is not necessary to read this -- just call GetOptions() which will 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) happily return the default instance. However, it's sometimes useful 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for efficiency, and also useful inside the protobuf implementation to 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) avoid some bootstrapping issues. 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def __init__(self, options, options_class_name): 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Initialize the descriptor given its options message and the name of the 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class of the options message. The name of the class is required in case 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) the options message is None and has to be created. 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self._options = options 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self._options_class_name = options_class_name 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Does this descriptor have non-default options? 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.has_options = options is not None 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def GetOptions(self): 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Retrieves descriptor options. 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) This method returns the options set or creates the default options for the 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) descriptor. 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if self._options: 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return self._options 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) from google.protobuf import descriptor_pb2 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) try: 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options_class = getattr(descriptor_pb2, self._options_class_name) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) except AttributeError: 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) raise RuntimeError('Unknown options class name %s!' % 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (self._options_class_name)) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self._options = options_class() 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return self._options 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class _NestedDescriptorBase(DescriptorBase): 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Common class for descriptors that can be nested.""" 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def __init__(self, options, options_class_name, name, full_name, 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) file, containing_type, serialized_start=None, 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) serialized_end=None): 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Constructor. 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Args: 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options: Protocol message options or None 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) to use default message options. 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options_class_name: (str) The class name of the above options. 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name: (str) Name of this protocol message type. 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) full_name: (str) Fully-qualified name of this protocol message type, 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) which will include protocol "package" name and the name of any 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enclosing types. 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) file: (FileDescriptor) Reference to file info. 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) containing_type: if provided, this is a nested descriptor, with this 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) descriptor as parent, otherwise None. 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) serialized_start: The start index (inclusive) in block in the 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) file.serialized_pb that describes this descriptor. 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) serialized_end: The end index (exclusive) in block in the 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) file.serialized_pb that describes this descriptor. 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) super(_NestedDescriptorBase, self).__init__( 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options, options_class_name) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.name = name 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # TODO(falk): Add function to calculate full_name instead of having it in 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # memory? 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.full_name = full_name 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.file = file 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.containing_type = containing_type 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self._serialized_start = serialized_start 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self._serialized_end = serialized_end 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def GetTopLevelContainingType(self): 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Returns the root if this is a nested type, or itself if its the root.""" 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) desc = self 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while desc.containing_type is not None: 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) desc = desc.containing_type 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return desc 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def CopyToProto(self, proto): 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Copies this to the matching proto in descriptor_pb2. 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Args: 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) proto: An empty proto instance from descriptor_pb2. 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Raises: 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Error: If self couldnt be serialized, due to to few constructor arguments. 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (self.file is not None and 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self._serialized_start is not None and 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self._serialized_end is not None): 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) proto.ParseFromString(self.file.serialized_pb[ 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self._serialized_start:self._serialized_end]) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else: 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) raise Error('Descriptor does not contain serialization.') 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Descriptor(_NestedDescriptorBase): 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Descriptor for a protocol message type. 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) A Descriptor instance has the following attributes: 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name: (str) Name of this protocol message type. 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) full_name: (str) Fully-qualified name of this protocol message type, 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) which will include protocol "package" name and the name of any 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enclosing types. 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) containing_type: (Descriptor) Reference to the descriptor of the 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type containing us, or None if this is top-level. 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fields: (list of FieldDescriptors) Field descriptors for all 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fields in this type. 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fields_by_number: (dict int -> FieldDescriptor) Same FieldDescriptor 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) objects as in |fields|, but indexed by "number" attribute in each 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FieldDescriptor. 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fields_by_name: (dict str -> FieldDescriptor) Same FieldDescriptor 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) objects as in |fields|, but indexed by "name" attribute in each 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FieldDescriptor. 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nested_types: (list of Descriptors) Descriptor references 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for all protocol message types nested within this one. 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nested_types_by_name: (dict str -> Descriptor) Same Descriptor 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) objects as in |nested_types|, but indexed by "name" attribute 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) in each Descriptor. 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum_types: (list of EnumDescriptors) EnumDescriptor references 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for all enums contained within this type. 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum_types_by_name: (dict str ->EnumDescriptor) Same EnumDescriptor 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) objects as in |enum_types|, but indexed by "name" attribute 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) in each EnumDescriptor. 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum_values_by_name: (dict str -> EnumValueDescriptor) Dict mapping 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) from enum value name to EnumValueDescriptor for that value. 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions: (list of FieldDescriptor) All extensions defined directly 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) within this message type (NOT within a nested type). 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions_by_name: (dict, string -> FieldDescriptor) Same FieldDescriptor 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) objects as |extensions|, but indexed by "name" attribute of each 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FieldDescriptor. 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_extendable: Does this type define any extension ranges? 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options: (descriptor_pb2.MessageOptions) Protocol message options or None 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) to use default message options. 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) file: (FileDescriptor) Reference to file descriptor. 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def __init__(self, name, full_name, filename, containing_type, fields, 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nested_types, enum_types, extensions, options=None, 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_extendable=True, extension_ranges=None, file=None, 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) serialized_start=None, serialized_end=None): 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Arguments to __init__() are as described in the description 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) of Descriptor fields above. 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Note that filename is an obsolete argument, that is not used anymore. 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Please use file.name to access this as an attribute. 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) super(Descriptor, self).__init__( 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options, 'MessageOptions', name, full_name, file, 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) containing_type, serialized_start=serialized_start, 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) serialized_end=serialized_start) 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # We have fields in addition to fields_by_name and fields_by_number, 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # so that: 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # 1. Clients can index fields by "order in which they're listed." 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # 2. Clients can easily iterate over all fields with the terse 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # syntax: for f in descriptor.fields: ... 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.fields = fields 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for field in self.fields: 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.containing_type = self 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.fields_by_number = dict((f.number, f) for f in fields) 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.fields_by_name = dict((f.name, f) for f in fields) 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.nested_types = nested_types 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.nested_types_by_name = dict((t.name, t) for t in nested_types) 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.enum_types = enum_types 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for enum_type in self.enum_types: 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum_type.containing_type = self 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.enum_types_by_name = dict((t.name, t) for t in enum_types) 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.enum_values_by_name = dict( 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (v.name, v) for t in enum_types for v in t.values) 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.extensions = extensions 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for extension in self.extensions: 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension.extension_scope = self 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.extensions_by_name = dict((f.name, f) for f in extensions) 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.is_extendable = is_extendable 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.extension_ranges = extension_ranges 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self._serialized_start = serialized_start 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self._serialized_end = serialized_end 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def CopyToProto(self, proto): 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Copies this to a descriptor_pb2.DescriptorProto. 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Args: 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) proto: An empty descriptor_pb2.DescriptorProto. 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # This function is overriden to give a better doc comment. 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) super(Descriptor, self).CopyToProto(proto) 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# TODO(robinson): We should have aggressive checking here, 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# for example: 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# * If you specify a repeated field, you should not be allowed 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# to specify a default value. 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# * [Other examples here as needed]. 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# TODO(robinson): for this and other *Descriptor classes, we 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# might also want to lock things down aggressively (e.g., 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# prevent clients from setting the attributes). Having 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# stronger invariants here in general will reduce the number 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# of runtime checks we must do in reflection.py... 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FieldDescriptor(DescriptorBase): 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Descriptor for a single field in a .proto file. 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) A FieldDescriptor instance has the following attriubtes: 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name: (str) Name of this field, exactly as it appears in .proto. 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) full_name: (str) Name of this field, including containing scope. This is 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) particularly relevant for extensions. 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) index: (int) Dense, 0-indexed index giving the order that this 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field textually appears within its message in the .proto file. 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) number: (int) Tag number declared for this field in the .proto file. 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type: (One of the TYPE_* constants below) Declared type. 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cpp_type: (One of the CPPTYPE_* constants below) C++ type used to 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) represent this field. 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) label: (One of the LABEL_* constants below) Tells whether this 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field is optional, required, or repeated. 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) has_default_value: (bool) True if this field has a default value defined, 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) otherwise false. 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default_value: (Varies) Default value of this field. Only 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) meaningful for non-repeated scalar fields. Repeated fields 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) should always set this to [], and non-repeated composite 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fields should always set this to None. 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) containing_type: (Descriptor) Descriptor of the protocol message 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type that contains this field. Set by the Descriptor constructor 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if we're passed into one. 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Somewhat confusingly, for extension fields, this is the 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) descriptor of the EXTENDED message, not the descriptor 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) of the message containing this field. (See is_extension and 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_scope below). 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message_type: (Descriptor) If a composite field, a descriptor 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) of the message type contained in this field. Otherwise, this is None. 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum_type: (EnumDescriptor) If this field contains an enum, a 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) descriptor of that enum. Otherwise, this is None. 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_extension: True iff this describes an extension field. 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_scope: (Descriptor) Only meaningful if is_extension is True. 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Gives the message that immediately contains this extension field. 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Will be None iff we're a top-level (file-level) extension field. 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options: (descriptor_pb2.FieldOptions) Protocol message field options or 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) None to use default field options. 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Must be consistent with C++ FieldDescriptor::Type enum in 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # descriptor.h. 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # TODO(robinson): Find a way to eliminate this repetition. 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TYPE_DOUBLE = 1 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TYPE_FLOAT = 2 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TYPE_INT64 = 3 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TYPE_UINT64 = 4 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TYPE_INT32 = 5 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TYPE_FIXED64 = 6 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TYPE_FIXED32 = 7 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TYPE_BOOL = 8 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TYPE_STRING = 9 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TYPE_GROUP = 10 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TYPE_MESSAGE = 11 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TYPE_BYTES = 12 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TYPE_UINT32 = 13 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TYPE_ENUM = 14 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TYPE_SFIXED32 = 15 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TYPE_SFIXED64 = 16 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TYPE_SINT32 = 17 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TYPE_SINT64 = 18 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MAX_TYPE = 18 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Must be consistent with C++ FieldDescriptor::CppType enum in 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # descriptor.h. 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # TODO(robinson): Find a way to eliminate this repetition. 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CPPTYPE_INT32 = 1 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CPPTYPE_INT64 = 2 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CPPTYPE_UINT32 = 3 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CPPTYPE_UINT64 = 4 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CPPTYPE_DOUBLE = 5 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CPPTYPE_FLOAT = 6 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CPPTYPE_BOOL = 7 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CPPTYPE_ENUM = 8 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CPPTYPE_STRING = 9 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CPPTYPE_MESSAGE = 10 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MAX_CPPTYPE = 10 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Must be consistent with C++ FieldDescriptor::Label enum in 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # descriptor.h. 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # TODO(robinson): Find a way to eliminate this repetition. 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LABEL_OPTIONAL = 1 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LABEL_REQUIRED = 2 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LABEL_REPEATED = 3 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MAX_LABEL = 3 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def __init__(self, name, full_name, index, number, type, cpp_type, label, 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default_value, message_type, enum_type, containing_type, 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_extension, extension_scope, options=None, 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) has_default_value=True): 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """The arguments are as described in the description of FieldDescriptor 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) attributes above. 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Note that containing_type may be None, and may be set later if necessary 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (to deal with circular references between message types, for example). 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Likewise for extension_scope. 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) super(FieldDescriptor, self).__init__(options, 'FieldOptions') 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.name = name 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.full_name = full_name 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.index = index 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.number = number 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.type = type 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.cpp_type = cpp_type 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.label = label 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.has_default_value = has_default_value 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.default_value = default_value 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.containing_type = containing_type 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.message_type = message_type 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.enum_type = enum_type 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.is_extension = is_extension 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.extension_scope = extension_scope 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if api_implementation.Type() == 'cpp': 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if is_extension: 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self._cdescriptor = cpp_message.GetExtensionDescriptor(full_name) 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else: 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self._cdescriptor = cpp_message.GetFieldDescriptor(full_name) 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else: 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self._cdescriptor = None 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class EnumDescriptor(_NestedDescriptorBase): 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Descriptor for an enum defined in a .proto file. 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) An EnumDescriptor instance has the following attributes: 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name: (str) Name of the enum type. 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) full_name: (str) Full name of the type, including package name 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) and any enclosing type(s). 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) values: (list of EnumValueDescriptors) List of the values 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) in this enum. 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) values_by_name: (dict str -> EnumValueDescriptor) Same as |values|, 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) but indexed by the "name" field of each EnumValueDescriptor. 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) values_by_number: (dict int -> EnumValueDescriptor) Same as |values|, 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) but indexed by the "number" field of each EnumValueDescriptor. 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) containing_type: (Descriptor) Descriptor of the immediate containing 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type of this enum, or None if this is an enum defined at the 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) top level in a .proto file. Set by Descriptor's constructor 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if we're passed into one. 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) file: (FileDescriptor) Reference to file descriptor. 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options: (descriptor_pb2.EnumOptions) Enum options message or 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) None to use default enum options. 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def __init__(self, name, full_name, filename, values, 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) containing_type=None, options=None, file=None, 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) serialized_start=None, serialized_end=None): 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Arguments are as described in the attribute description above. 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Note that filename is an obsolete argument, that is not used anymore. 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Please use file.name to access this as an attribute. 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) super(EnumDescriptor, self).__init__( 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options, 'EnumOptions', name, full_name, file, 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) containing_type, serialized_start=serialized_start, 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) serialized_end=serialized_start) 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.values = values 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for value in self.values: 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value.type = self 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.values_by_name = dict((v.name, v) for v in values) 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.values_by_number = dict((v.number, v) for v in values) 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self._serialized_start = serialized_start 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self._serialized_end = serialized_end 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def CopyToProto(self, proto): 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Copies this to a descriptor_pb2.EnumDescriptorProto. 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Args: 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) proto: An empty descriptor_pb2.EnumDescriptorProto. 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # This function is overriden to give a better doc comment. 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) super(EnumDescriptor, self).CopyToProto(proto) 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class EnumValueDescriptor(DescriptorBase): 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Descriptor for a single value within an enum. 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name: (str) Name of this value. 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) index: (int) Dense, 0-indexed index giving the order that this 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value appears textually within its enum in the .proto file. 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) number: (int) Actual number assigned to this enum value. 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type: (EnumDescriptor) EnumDescriptor to which this value 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) belongs. Set by EnumDescriptor's constructor if we're 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) passed into one. 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options: (descriptor_pb2.EnumValueOptions) Enum value options message or 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) None to use default enum value options options. 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def __init__(self, name, index, number, type=None, options=None): 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Arguments are as described in the attribute description above.""" 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) super(EnumValueDescriptor, self).__init__(options, 'EnumValueOptions') 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.name = name 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.index = index 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.number = number 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.type = type 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ServiceDescriptor(_NestedDescriptorBase): 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Descriptor for a service. 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name: (str) Name of the service. 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) full_name: (str) Full name of the service, including package name. 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) index: (int) 0-indexed index giving the order that this services 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) definition appears withing the .proto file. 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) methods: (list of MethodDescriptor) List of methods provided by this 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service. 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options: (descriptor_pb2.ServiceOptions) Service options message or 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) None to use default service options. 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) file: (FileDescriptor) Reference to file info. 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def __init__(self, name, full_name, index, methods, options=None, file=None, 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) serialized_start=None, serialized_end=None): 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) super(ServiceDescriptor, self).__init__( 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options, 'ServiceOptions', name, full_name, file, 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) None, serialized_start=serialized_start, 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) serialized_end=serialized_end) 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.index = index 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.methods = methods 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Set the containing service for each method in this service. 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for method in self.methods: 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) method.containing_service = self 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def FindMethodByName(self, name): 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Searches for the specified method, and returns its descriptor.""" 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for method in self.methods: 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if name == method.name: 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return method 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return None 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def CopyToProto(self, proto): 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Copies this to a descriptor_pb2.ServiceDescriptorProto. 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Args: 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) proto: An empty descriptor_pb2.ServiceDescriptorProto. 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # This function is overriden to give a better doc comment. 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) super(ServiceDescriptor, self).CopyToProto(proto) 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MethodDescriptor(DescriptorBase): 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Descriptor for a method in a service. 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name: (str) Name of the method within the service. 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) full_name: (str) Full name of method. 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) index: (int) 0-indexed index of the method inside the service. 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) containing_service: (ServiceDescriptor) The service that contains this 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) method. 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) input_type: The descriptor of the message that this method accepts. 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) output_type: The descriptor of the message that this method returns. 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options: (descriptor_pb2.MethodOptions) Method options message or 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) None to use default method options. 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def __init__(self, name, full_name, index, containing_service, 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) input_type, output_type, options=None): 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """The arguments are as described in the description of MethodDescriptor 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) attributes above. 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Note that containing_service may be None, and may be set later if necessary. 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) super(MethodDescriptor, self).__init__(options, 'MethodOptions') 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.name = name 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.full_name = full_name 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.index = index 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.containing_service = containing_service 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.input_type = input_type 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.output_type = output_type 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FileDescriptor(DescriptorBase): 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Descriptor for a file. Mimics the descriptor_pb2.FileDescriptorProto. 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name: name of file, relative to root of source tree. 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) package: name of the package 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) serialized_pb: (str) Byte string of serialized 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) descriptor_pb2.FileDescriptorProto. 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def __init__(self, name, package, options=None, serialized_pb=None): 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Constructor.""" 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) super(FileDescriptor, self).__init__(options, 'FileOptions') 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.message_types_by_name = {} 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.name = name 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.package = package 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.serialized_pb = serialized_pb 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (api_implementation.Type() == 'cpp' and 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.serialized_pb is not None): 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cpp_message.BuildFile(self.serialized_pb) 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def CopyToProto(self, proto): 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Copies this to a descriptor_pb2.FileDescriptorProto. 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Args: 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) proto: An empty descriptor_pb2.FileDescriptorProto. 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) proto.ParseFromString(self.serialized_pb) 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def _ParseOptions(message, string): 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Parses serialized options. 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) This helper function is used to parse serialized options in generated 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) proto2 files. It must not be used outside proto2. 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message.ParseFromString(string) 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return message 599