1ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch# Protocol Buffers - Google's data interchange format 2ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch# Copyright 2008 Google Inc. All rights reserved. 3ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch# http://code.google.com/p/protobuf/ 4ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch# 5ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch# Redistribution and use in source and binary forms, with or without 6ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch# modification, are permitted provided that the following conditions are 7ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch# met: 8ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch# 9ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch# * Redistributions of source code must retain the above copyright 10ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch# notice, this list of conditions and the following disclaimer. 11ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch# * Redistributions in binary form must reproduce the above 12ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch# copyright notice, this list of conditions and the following disclaimer 13ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch# in the documentation and/or other materials provided with the 14ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch# distribution. 15ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch# * Neither the name of Google Inc. nor the names of its 16ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch# contributors may be used to endorse or promote products derived from 17ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch# this software without specific prior written permission. 18ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch# 19ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 31ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch"""A simple wrapper around enum types to expose utility functions. 32ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 33ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochInstances are created as properties with the same name as the enum they wrap 34ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochon proto classes. For usage, see: 35ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch reflection_test.py 36ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch""" 37ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 38ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch__author__ = 'rabsatt@google.com (Kevin Rabsatt)' 39ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 40ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 41ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochclass EnumTypeWrapper(object): 42ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch """A utility for finding the names of enum values.""" 43ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 44ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch DESCRIPTOR = None 45ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 46ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch def __init__(self, enum_type): 47ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch """Inits EnumTypeWrapper with an EnumDescriptor.""" 48ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch self._enum_type = enum_type 49ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch self.DESCRIPTOR = enum_type; 50ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 51ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch def Name(self, number): 52ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch """Returns a string containing the name of an enum value.""" 53ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch if number in self._enum_type.values_by_number: 54ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch return self._enum_type.values_by_number[number].name 55ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch raise ValueError('Enum %s has no name defined for value %d' % ( 56ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch self._enum_type.name, number)) 57ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 58ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch def Value(self, name): 59ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch """Returns the value coresponding to the given enum name.""" 60ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch if name in self._enum_type.values_by_name: 61ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch return self._enum_type.values_by_name[name].number 62ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch raise ValueError('Enum %s has no value defined for name %s' % ( 63ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch self._enum_type.name, name)) 64ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 65ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch def keys(self): 66ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch """Return a list of the string names in the enum. 67ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 68ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch These are returned in the order they were defined in the .proto file. 69ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch """ 70ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 71ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch return [value_descriptor.name 72ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch for value_descriptor in self._enum_type.values] 73ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 74ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch def values(self): 75ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch """Return a list of the integer values in the enum. 76ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 77ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch These are returned in the order they were defined in the .proto file. 78ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch """ 79ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 80ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch return [value_descriptor.number 81ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch for value_descriptor in self._enum_type.values] 82ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 83ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch def items(self): 84ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch """Return a list of the (name, value) pairs of the enum. 85ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 86ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch These are returned in the order they were defined in the .proto file. 87ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch """ 88ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch return [(value_descriptor.name, value_descriptor.number) 89ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch for value_descriptor in self._enum_type.values] 90