1fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# Protocol Buffers - Google's data interchange format 2fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# Copyright 2008 Google Inc. All rights reserved. 3fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# http://code.google.com/p/protobuf/ 4fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# 5fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# Redistribution and use in source and binary forms, with or without 6fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# modification, are permitted provided that the following conditions are 7fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# met: 8fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# 9fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# * Redistributions of source code must retain the above copyright 10fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# notice, this list of conditions and the following disclaimer. 11fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# * Redistributions in binary form must reproduce the above 12fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# copyright notice, this list of conditions and the following disclaimer 13fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# in the documentation and/or other materials provided with the 14fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# distribution. 15fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# * Neither the name of Google Inc. nor the names of its 16fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# contributors may be used to endorse or promote products derived from 17fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# this software without specific prior written permission. 18fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# 19fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 31fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# TODO(robinson): We probably need to provide deep-copy methods for 32fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# descriptor types. When a FieldDescriptor is passed into 33fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# Descriptor.__init__(), we should make a deep copy and then set 34fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# containing_type on it. Alternatively, we could just get 35fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# rid of containing_type (iit's not needed for reflection.py, at least). 36fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# 37fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# TODO(robinson): Print method? 38fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# 39fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# TODO(robinson): Useful __repr__? 40fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 41fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville"""Descriptors essentially contain exactly the information found in a .proto 42fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillefile, in types that make this information accessible in Python. 43fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville""" 44fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 45fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville__author__ = 'robinson@google.com (Will Robinson)' 46fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 47d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 48d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilleclass Error(Exception): 49d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville """Base error for this module.""" 50d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 51d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 52fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleclass DescriptorBase(object): 53fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 54fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville """Descriptors base class. 55fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 56fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville This class is the base of all descriptor classes. It provides common options 57fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville related functionaility. 58d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 59d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville Attributes: 60d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville has_options: True if the descriptor has non-default options. Usually it 61d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville is not necessary to read this -- just call GetOptions() which will 62d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville happily return the default instance. However, it's sometimes useful 63d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville for efficiency, and also useful inside the protobuf implementation to 64d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville avoid some bootstrapping issues. 65fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville """ 66fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 67fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def __init__(self, options, options_class_name): 68fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville """Initialize the descriptor given its options message and the name of the 69fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville class of the options message. The name of the class is required in case 70fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville the options message is None and has to be created. 71fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville """ 72fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self._options = options 73fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self._options_class_name = options_class_name 74fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 75d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville # Does this descriptor have non-default options? 76d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.has_options = options is not None 77d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 78fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def GetOptions(self): 79fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville """Retrieves descriptor options. 80fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 81fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville This method returns the options set or creates the default options for the 82fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville descriptor. 83fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville """ 84fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if self._options: 85fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return self._options 86fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville from google.protobuf import descriptor_pb2 87fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville try: 88fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville options_class = getattr(descriptor_pb2, self._options_class_name) 89fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville except AttributeError: 90fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville raise RuntimeError('Unknown options class name %s!' % 91fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville (self._options_class_name)) 92fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self._options = options_class() 93fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return self._options 94fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 95fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 96d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilleclass _NestedDescriptorBase(DescriptorBase): 97d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville """Common class for descriptors that can be nested.""" 98d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 99d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def __init__(self, options, options_class_name, name, full_name, 100d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville file, containing_type, serialized_start=None, 101d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville serialized_end=None): 102d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville """Constructor. 103d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 104d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville Args: 105d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville options: Protocol message options or None 106d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville to use default message options. 107d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville options_class_name: (str) The class name of the above options. 108d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 109d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville name: (str) Name of this protocol message type. 110d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville full_name: (str) Fully-qualified name of this protocol message type, 111d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville which will include protocol "package" name and the name of any 112d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville enclosing types. 113d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville file: (FileDescriptor) Reference to file info. 114d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville containing_type: if provided, this is a nested descriptor, with this 115d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville descriptor as parent, otherwise None. 116d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville serialized_start: The start index (inclusive) in block in the 117d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville file.serialized_pb that describes this descriptor. 118d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville serialized_end: The end index (exclusive) in block in the 119d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville file.serialized_pb that describes this descriptor. 120d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville """ 121d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville super(_NestedDescriptorBase, self).__init__( 122d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville options, options_class_name) 123d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 124d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.name = name 125d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville # TODO(falk): Add function to calculate full_name instead of having it in 126d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville # memory? 127d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.full_name = full_name 128d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.file = file 129d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.containing_type = containing_type 130d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 131d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self._serialized_start = serialized_start 132d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self._serialized_end = serialized_end 133d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 134d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def GetTopLevelContainingType(self): 135d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville """Returns the root if this is a nested type, or itself if its the root.""" 136d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville desc = self 137d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville while desc.containing_type is not None: 138d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville desc = desc.containing_type 139d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville return desc 140d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 141d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def CopyToProto(self, proto): 142d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville """Copies this to the matching proto in descriptor_pb2. 143d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 144d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville Args: 145d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville proto: An empty proto instance from descriptor_pb2. 146d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 147d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville Raises: 148d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville Error: If self couldnt be serialized, due to to few constructor arguments. 149d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville """ 150d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville if (self.file is not None and 151d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self._serialized_start is not None and 152d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self._serialized_end is not None): 153d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville proto.ParseFromString(self.file.serialized_pb[ 154d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self._serialized_start:self._serialized_end]) 155d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville else: 156d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville raise Error('Descriptor does not contain serialization.') 157d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 158d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 159d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilleclass Descriptor(_NestedDescriptorBase): 160fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 161fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville """Descriptor for a protocol message type. 162fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 163fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville A Descriptor instance has the following attributes: 164fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 165fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville name: (str) Name of this protocol message type. 166fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville full_name: (str) Fully-qualified name of this protocol message type, 167fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville which will include protocol "package" name and the name of any 168fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville enclosing types. 169fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 170fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville containing_type: (Descriptor) Reference to the descriptor of the 171d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville type containing us, or None if this is top-level. 172fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 173fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville fields: (list of FieldDescriptors) Field descriptors for all 174fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville fields in this type. 175fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville fields_by_number: (dict int -> FieldDescriptor) Same FieldDescriptor 176fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville objects as in |fields|, but indexed by "number" attribute in each 177fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville FieldDescriptor. 178fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville fields_by_name: (dict str -> FieldDescriptor) Same FieldDescriptor 179fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville objects as in |fields|, but indexed by "name" attribute in each 180fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville FieldDescriptor. 181fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 182fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville nested_types: (list of Descriptors) Descriptor references 183fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville for all protocol message types nested within this one. 184fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville nested_types_by_name: (dict str -> Descriptor) Same Descriptor 185fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville objects as in |nested_types|, but indexed by "name" attribute 186fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville in each Descriptor. 187fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 188fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville enum_types: (list of EnumDescriptors) EnumDescriptor references 189fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville for all enums contained within this type. 190fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville enum_types_by_name: (dict str ->EnumDescriptor) Same EnumDescriptor 191fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville objects as in |enum_types|, but indexed by "name" attribute 192fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville in each EnumDescriptor. 193fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville enum_values_by_name: (dict str -> EnumValueDescriptor) Dict mapping 194fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville from enum value name to EnumValueDescriptor for that value. 195fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 196fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extensions: (list of FieldDescriptor) All extensions defined directly 197fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville within this message type (NOT within a nested type). 198fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extensions_by_name: (dict, string -> FieldDescriptor) Same FieldDescriptor 199fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville objects as |extensions|, but indexed by "name" attribute of each 200fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville FieldDescriptor. 201fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 202d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville is_extendable: Does this type define any extension ranges? 203d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 204fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville options: (descriptor_pb2.MessageOptions) Protocol message options or None 205fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville to use default message options. 206d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 207d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville file: (FileDescriptor) Reference to file descriptor. 208fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville """ 209fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 210d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def __init__(self, name, full_name, filename, containing_type, fields, 211d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville nested_types, enum_types, extensions, options=None, 212d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville is_extendable=True, extension_ranges=None, file=None, 213d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville serialized_start=None, serialized_end=None): 214fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville """Arguments to __init__() are as described in the description 215fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville of Descriptor fields above. 216d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 217d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville Note that filename is an obsolete argument, that is not used anymore. 218d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville Please use file.name to access this as an attribute. 219fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville """ 220d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville super(Descriptor, self).__init__( 221d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville options, 'MessageOptions', name, full_name, file, 222d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville containing_type, serialized_start=serialized_start, 223d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville serialized_end=serialized_start) 224fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 225fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # We have fields in addition to fields_by_name and fields_by_number, 226fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # so that: 227fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # 1. Clients can index fields by "order in which they're listed." 228fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # 2. Clients can easily iterate over all fields with the terse 229fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # syntax: for f in descriptor.fields: ... 230fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.fields = fields 231fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville for field in self.fields: 232fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville field.containing_type = self 233fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.fields_by_number = dict((f.number, f) for f in fields) 234fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.fields_by_name = dict((f.name, f) for f in fields) 235fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 236fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.nested_types = nested_types 237fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.nested_types_by_name = dict((t.name, t) for t in nested_types) 238fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 239fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.enum_types = enum_types 240fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville for enum_type in self.enum_types: 241fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville enum_type.containing_type = self 242fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.enum_types_by_name = dict((t.name, t) for t in enum_types) 243fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.enum_values_by_name = dict( 244fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville (v.name, v) for t in enum_types for v in t.values) 245fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 246fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.extensions = extensions 247fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville for extension in self.extensions: 248fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extension.extension_scope = self 249fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.extensions_by_name = dict((f.name, f) for f in extensions) 250d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.is_extendable = is_extendable 251d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.extension_ranges = extension_ranges 252d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 253d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self._serialized_start = serialized_start 254d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self._serialized_end = serialized_end 255d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 256d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def CopyToProto(self, proto): 257d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville """Copies this to a descriptor_pb2.DescriptorProto. 258d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 259d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville Args: 260d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville proto: An empty descriptor_pb2.DescriptorProto. 261d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville """ 262d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville # This function is overriden to give a better doc comment. 263d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville super(Descriptor, self).CopyToProto(proto) 264fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 265fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 266fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# TODO(robinson): We should have aggressive checking here, 267fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# for example: 268fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# * If you specify a repeated field, you should not be allowed 269fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# to specify a default value. 270fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# * [Other examples here as needed]. 271fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# 272fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# TODO(robinson): for this and other *Descriptor classes, we 273fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# might also want to lock things down aggressively (e.g., 274fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# prevent clients from setting the attributes). Having 275fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# stronger invariants here in general will reduce the number 276fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# of runtime checks we must do in reflection.py... 277fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleclass FieldDescriptor(DescriptorBase): 278fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 279fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville """Descriptor for a single field in a .proto file. 280fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 281fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville A FieldDescriptor instance has the following attriubtes: 282fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 283fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville name: (str) Name of this field, exactly as it appears in .proto. 284fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville full_name: (str) Name of this field, including containing scope. This is 285fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville particularly relevant for extensions. 286fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville index: (int) Dense, 0-indexed index giving the order that this 287fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville field textually appears within its message in the .proto file. 288fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville number: (int) Tag number declared for this field in the .proto file. 289fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 290fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville type: (One of the TYPE_* constants below) Declared type. 291fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville cpp_type: (One of the CPPTYPE_* constants below) C++ type used to 292fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville represent this field. 293fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 294fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville label: (One of the LABEL_* constants below) Tells whether this 295fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville field is optional, required, or repeated. 296d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville has_default_value: (bool) True if this field has a default value defined, 297d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville otherwise false. 298fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville default_value: (Varies) Default value of this field. Only 299fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville meaningful for non-repeated scalar fields. Repeated fields 300fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville should always set this to [], and non-repeated composite 301fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville fields should always set this to None. 302fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 303fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville containing_type: (Descriptor) Descriptor of the protocol message 304fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville type that contains this field. Set by the Descriptor constructor 305fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if we're passed into one. 306fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Somewhat confusingly, for extension fields, this is the 307fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville descriptor of the EXTENDED message, not the descriptor 308fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville of the message containing this field. (See is_extension and 309fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extension_scope below). 310fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message_type: (Descriptor) If a composite field, a descriptor 311fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville of the message type contained in this field. Otherwise, this is None. 312fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville enum_type: (EnumDescriptor) If this field contains an enum, a 313fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville descriptor of that enum. Otherwise, this is None. 314fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 315fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville is_extension: True iff this describes an extension field. 316fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extension_scope: (Descriptor) Only meaningful if is_extension is True. 317fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Gives the message that immediately contains this extension field. 318fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Will be None iff we're a top-level (file-level) extension field. 319fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 320fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville options: (descriptor_pb2.FieldOptions) Protocol message field options or 321fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville None to use default field options. 322fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville """ 323fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 324fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Must be consistent with C++ FieldDescriptor::Type enum in 325fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # descriptor.h. 326fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # 327fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # TODO(robinson): Find a way to eliminate this repetition. 328fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville TYPE_DOUBLE = 1 329fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville TYPE_FLOAT = 2 330fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville TYPE_INT64 = 3 331fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville TYPE_UINT64 = 4 332fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville TYPE_INT32 = 5 333fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville TYPE_FIXED64 = 6 334fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville TYPE_FIXED32 = 7 335fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville TYPE_BOOL = 8 336fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville TYPE_STRING = 9 337fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville TYPE_GROUP = 10 338fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville TYPE_MESSAGE = 11 339fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville TYPE_BYTES = 12 340fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville TYPE_UINT32 = 13 341fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville TYPE_ENUM = 14 342fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville TYPE_SFIXED32 = 15 343fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville TYPE_SFIXED64 = 16 344fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville TYPE_SINT32 = 17 345fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville TYPE_SINT64 = 18 346fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville MAX_TYPE = 18 347fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 348fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Must be consistent with C++ FieldDescriptor::CppType enum in 349fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # descriptor.h. 350fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # 351fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # TODO(robinson): Find a way to eliminate this repetition. 352fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville CPPTYPE_INT32 = 1 353fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville CPPTYPE_INT64 = 2 354fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville CPPTYPE_UINT32 = 3 355fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville CPPTYPE_UINT64 = 4 356fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville CPPTYPE_DOUBLE = 5 357fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville CPPTYPE_FLOAT = 6 358fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville CPPTYPE_BOOL = 7 359fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville CPPTYPE_ENUM = 8 360fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville CPPTYPE_STRING = 9 361fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville CPPTYPE_MESSAGE = 10 362fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville MAX_CPPTYPE = 10 363fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 364fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Must be consistent with C++ FieldDescriptor::Label enum in 365fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # descriptor.h. 366fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # 367fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # TODO(robinson): Find a way to eliminate this repetition. 368fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville LABEL_OPTIONAL = 1 369fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville LABEL_REQUIRED = 2 370fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville LABEL_REPEATED = 3 371fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville MAX_LABEL = 3 372fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 373fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def __init__(self, name, full_name, index, number, type, cpp_type, label, 374fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville default_value, message_type, enum_type, containing_type, 375d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville is_extension, extension_scope, options=None, 376d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville has_default_value=True): 377fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville """The arguments are as described in the description of FieldDescriptor 378fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville attributes above. 379fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 380fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Note that containing_type may be None, and may be set later if necessary 381fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville (to deal with circular references between message types, for example). 382fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Likewise for extension_scope. 383fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville """ 384fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville super(FieldDescriptor, self).__init__(options, 'FieldOptions') 385fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.name = name 386fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.full_name = full_name 387fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.index = index 388fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.number = number 389fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.type = type 390fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.cpp_type = cpp_type 391fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.label = label 392d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.has_default_value = has_default_value 393fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.default_value = default_value 394fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.containing_type = containing_type 395fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.message_type = message_type 396fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.enum_type = enum_type 397fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.is_extension = is_extension 398fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.extension_scope = extension_scope 399fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 400fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 401d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilleclass EnumDescriptor(_NestedDescriptorBase): 402fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 403fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville """Descriptor for an enum defined in a .proto file. 404fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 405fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville An EnumDescriptor instance has the following attributes: 406fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 407fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville name: (str) Name of the enum type. 408fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville full_name: (str) Full name of the type, including package name 409fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville and any enclosing type(s). 410fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 411fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville values: (list of EnumValueDescriptors) List of the values 412fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville in this enum. 413fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville values_by_name: (dict str -> EnumValueDescriptor) Same as |values|, 414fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville but indexed by the "name" field of each EnumValueDescriptor. 415fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville values_by_number: (dict int -> EnumValueDescriptor) Same as |values|, 416fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville but indexed by the "number" field of each EnumValueDescriptor. 417fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville containing_type: (Descriptor) Descriptor of the immediate containing 418fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville type of this enum, or None if this is an enum defined at the 419fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville top level in a .proto file. Set by Descriptor's constructor 420fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if we're passed into one. 421d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville file: (FileDescriptor) Reference to file descriptor. 422fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville options: (descriptor_pb2.EnumOptions) Enum options message or 423fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville None to use default enum options. 424fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville """ 425fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 426fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def __init__(self, name, full_name, filename, values, 427d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville containing_type=None, options=None, file=None, 428d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville serialized_start=None, serialized_end=None): 429d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville """Arguments are as described in the attribute description above. 430d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 431d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville Note that filename is an obsolete argument, that is not used anymore. 432d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville Please use file.name to access this as an attribute. 433d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville """ 434d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville super(EnumDescriptor, self).__init__( 435d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville options, 'EnumOptions', name, full_name, file, 436d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville containing_type, serialized_start=serialized_start, 437d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville serialized_end=serialized_start) 438d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 439fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.values = values 440fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville for value in self.values: 441fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville value.type = self 442fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.values_by_name = dict((v.name, v) for v in values) 443fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.values_by_number = dict((v.number, v) for v in values) 444d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 445d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self._serialized_start = serialized_start 446d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self._serialized_end = serialized_end 447d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 448d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def CopyToProto(self, proto): 449d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville """Copies this to a descriptor_pb2.EnumDescriptorProto. 450d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 451d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville Args: 452d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville proto: An empty descriptor_pb2.EnumDescriptorProto. 453d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville """ 454d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville # This function is overriden to give a better doc comment. 455d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville super(EnumDescriptor, self).CopyToProto(proto) 456fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 457fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 458fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleclass EnumValueDescriptor(DescriptorBase): 459fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 460fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville """Descriptor for a single value within an enum. 461fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 462fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville name: (str) Name of this value. 463fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville index: (int) Dense, 0-indexed index giving the order that this 464fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville value appears textually within its enum in the .proto file. 465fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville number: (int) Actual number assigned to this enum value. 466fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville type: (EnumDescriptor) EnumDescriptor to which this value 467fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville belongs. Set by EnumDescriptor's constructor if we're 468fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville passed into one. 469fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville options: (descriptor_pb2.EnumValueOptions) Enum value options message or 470fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville None to use default enum value options options. 471fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville """ 472fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 473fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def __init__(self, name, index, number, type=None, options=None): 474fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville """Arguments are as described in the attribute description above.""" 475fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville super(EnumValueDescriptor, self).__init__(options, 'EnumValueOptions') 476fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.name = name 477fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.index = index 478fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.number = number 479fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.type = type 480fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 481fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 482d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilleclass ServiceDescriptor(_NestedDescriptorBase): 483fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 484fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville """Descriptor for a service. 485fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 486fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville name: (str) Name of the service. 487fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville full_name: (str) Full name of the service, including package name. 488fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville index: (int) 0-indexed index giving the order that this services 489fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville definition appears withing the .proto file. 490fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville methods: (list of MethodDescriptor) List of methods provided by this 491fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville service. 492fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville options: (descriptor_pb2.ServiceOptions) Service options message or 493fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville None to use default service options. 494d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville file: (FileDescriptor) Reference to file info. 495fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville """ 496fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 497d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def __init__(self, name, full_name, index, methods, options=None, file=None, 498d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville serialized_start=None, serialized_end=None): 499d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville super(ServiceDescriptor, self).__init__( 500d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville options, 'ServiceOptions', name, full_name, file, 501d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville None, serialized_start=serialized_start, 502d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville serialized_end=serialized_end) 503fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.index = index 504fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.methods = methods 505fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Set the containing service for each method in this service. 506fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville for method in self.methods: 507fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville method.containing_service = self 508fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 509fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def FindMethodByName(self, name): 510fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville """Searches for the specified method, and returns its descriptor.""" 511fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville for method in self.methods: 512fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if name == method.name: 513fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return method 514fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return None 515fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 516d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def CopyToProto(self, proto): 517d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville """Copies this to a descriptor_pb2.ServiceDescriptorProto. 518d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 519d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville Args: 520d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville proto: An empty descriptor_pb2.ServiceDescriptorProto. 521d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville """ 522d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville # This function is overriden to give a better doc comment. 523d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville super(ServiceDescriptor, self).CopyToProto(proto) 524d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 525fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 526fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleclass MethodDescriptor(DescriptorBase): 527fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 528fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville """Descriptor for a method in a service. 529fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 530fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville name: (str) Name of the method within the service. 531fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville full_name: (str) Full name of method. 532fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville index: (int) 0-indexed index of the method inside the service. 533fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville containing_service: (ServiceDescriptor) The service that contains this 534fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville method. 535fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville input_type: The descriptor of the message that this method accepts. 536fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville output_type: The descriptor of the message that this method returns. 537fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville options: (descriptor_pb2.MethodOptions) Method options message or 538fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville None to use default method options. 539fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville """ 540fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 541fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def __init__(self, name, full_name, index, containing_service, 542fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville input_type, output_type, options=None): 543fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville """The arguments are as described in the description of MethodDescriptor 544fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville attributes above. 545fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 546fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Note that containing_service may be None, and may be set later if necessary. 547fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville """ 548fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville super(MethodDescriptor, self).__init__(options, 'MethodOptions') 549fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.name = name 550fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.full_name = full_name 551fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.index = index 552fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.containing_service = containing_service 553fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.input_type = input_type 554fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.output_type = output_type 555fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 556fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 557d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilleclass FileDescriptor(DescriptorBase): 558d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville """Descriptor for a file. Mimics the descriptor_pb2.FileDescriptorProto. 559d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 560d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville name: name of file, relative to root of source tree. 561d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville package: name of the package 562d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville serialized_pb: (str) Byte string of serialized 563d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville descriptor_pb2.FileDescriptorProto. 564d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville """ 565d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 566d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def __init__(self, name, package, options=None, serialized_pb=None): 567d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville """Constructor.""" 568d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville super(FileDescriptor, self).__init__(options, 'FileOptions') 569d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 570d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.name = name 571d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.package = package 572d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.serialized_pb = serialized_pb 573d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 574d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def CopyToProto(self, proto): 575d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville """Copies this to a descriptor_pb2.FileDescriptorProto. 576d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 577d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville Args: 578d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville proto: An empty descriptor_pb2.FileDescriptorProto. 579d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville """ 580d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville proto.ParseFromString(self.serialized_pb) 581d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 582d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 583fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilledef _ParseOptions(message, string): 584fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville """Parses serialized options. 585fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 586fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville This helper function is used to parse serialized options in generated 587fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto2 files. It must not be used outside proto2. 588fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville """ 589fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message.ParseFromString(string) 590d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville return message 591