PATH:
lib
/
python2.7
/
site-packages
/
google
/
protobuf
# Protocol Buffers - Google's data interchange format # Copyright 2008 Google Inc. All rights reserved. # https://developers.google.com/protocol-buffers/ # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are # met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above # copyright notice, this list of conditions and the following disclaimer # in the documentation and/or other materials provided with the # distribution. # * Neither the name of Google Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """Provides a container for DescriptorProtos.""" __author__ = 'matthewtoia@google.com (Matt Toia)' class Error(Exception): pass class DescriptorDatabaseConflictingDefinitionError(Error): """Raised when a proto is added with the same name & different descriptor.""" class DescriptorDatabase(object): """A container accepting FileDescriptorProtos and maps DescriptorProtos.""" def __init__(self): self._file_desc_protos_by_file = {} self._file_desc_protos_by_symbol = {} def Add(self, file_desc_proto): """Adds the FileDescriptorProto and its types to this database. Args: file_desc_proto: The FileDescriptorProto to add. Raises: DescriptorDatabaseConflictingDefinitionError: if an attempt is made to add a proto with the same name but different definition than an exisiting proto in the database. """ proto_name = file_desc_proto.name if proto_name not in self._file_desc_protos_by_file: self._file_desc_protos_by_file[proto_name] = file_desc_proto elif self._file_desc_protos_by_file[proto_name] != file_desc_proto: raise DescriptorDatabaseConflictingDefinitionError( '%s already added, but with different descriptor.' % proto_name) # Add all the top-level descriptors to the index. package = file_desc_proto.package for message in file_desc_proto.message_type: self._file_desc_protos_by_symbol.update( (name, file_desc_proto) for name in _ExtractSymbols(message, package)) for enum in file_desc_proto.enum_type: self._file_desc_protos_by_symbol[ '.'.join((package, enum.name))] = file_desc_proto for extension in file_desc_proto.extension: self._file_desc_protos_by_symbol[ '.'.join((package, extension.name))] = file_desc_proto for service in file_desc_proto.service: self._file_desc_protos_by_symbol[ '.'.join((package, service.name))] = file_desc_proto def FindFileByName(self, name): """Finds the file descriptor proto by file name. Typically the file name is a relative path ending to a .proto file. The proto with the given name will have to have been added to this database using the Add method or else an error will be raised. Args: name: The file name to find. Returns: The file descriptor proto matching the name. Raises: KeyError if no file by the given name was added. """ return self._file_desc_protos_by_file[name] def FindFileContainingSymbol(self, symbol): """Finds the file descriptor proto containing the specified symbol. The symbol should be a fully qualified name including the file descriptor's package and any containing messages. Some examples: 'some.package.name.Message' 'some.package.name.Message.NestedEnum' 'some.package.name.Message.some_field' The file descriptor proto containing the specified symbol must be added to this database using the Add method or else an error will be raised. Args: symbol: The fully qualified symbol name. Returns: The file descriptor proto containing the symbol. Raises: KeyError if no file contains the specified symbol. """ try: return self._file_desc_protos_by_symbol[symbol] except KeyError: # Fields, enum values, and nested extensions are not in # _file_desc_protos_by_symbol. Try to find the top level # descriptor. Non-existent nested symbol under a valid top level # descriptor can also be found. The behavior is the same with # protobuf C++. top_level, _, _ = symbol.rpartition('.') return self._file_desc_protos_by_symbol[top_level] def _ExtractSymbols(desc_proto, package): """Pulls out all the symbols from a descriptor proto. Args: desc_proto: The proto to extract symbols from. package: The package containing the descriptor type. Yields: The fully qualified name found in the descriptor. """ message_name = package + '.' + desc_proto.name if package else desc_proto.name yield message_name for nested_type in desc_proto.nested_type: for symbol in _ExtractSymbols(nested_type, message_name): yield symbol for enum_type in desc_proto.enum_type: yield '.'.join((message_name, enum_type.name))
[+]
..
[-] unittest_no_arena_pb2.pyc
[edit]
[-] map_unittest_pb2.py
[edit]
[-] proto_builder.py
[edit]
[-] any_pb2.py
[edit]
[-] __init__.pyo
[edit]
[-] reflection.py
[edit]
[-] proto_builder.pyo
[edit]
[-] test_messages_proto2_pb2.pyo
[edit]
[-] unittest_import_public_pb2.pyc
[edit]
[-] unittest_pb2.pyc
[edit]
[-] duration_pb2.py
[edit]
[-] wrappers_pb2.py
[edit]
[-] duration_pb2.pyc
[edit]
[-] duration_pb2.pyo
[edit]
[-] proto_builder.pyc
[edit]
[-] unittest_import_public_pb2.pyo
[edit]
[-] descriptor.py
[edit]
[-] json_format.py
[edit]
[-] unittest_import_pb2.py
[edit]
[-] test_messages_proto2_pb2.pyc
[edit]
[+]
internal
[-] test_messages_proto2_pb2.py
[edit]
[-] wrappers_pb2.pyo
[edit]
[-] empty_pb2.pyo
[edit]
[-] field_mask_pb2.pyo
[edit]
[-] unittest_mset_pb2.pyo
[edit]
[-] unittest_arena_pb2.pyo
[edit]
[-] unittest_proto3_arena_pb2.py
[edit]
[+]
compiler
[-] descriptor_database.pyo
[edit]
[-] map_unittest_pb2.pyc
[edit]
[-] unittest_no_generic_services_pb2.py
[edit]
[-] unittest_proto3_arena_pb2.pyc
[edit]
[-] timestamp_pb2.pyc
[edit]
[-] unittest_arena_pb2.py
[edit]
[-] unittest_mset_wire_format_pb2.pyc
[edit]
[-] unittest_no_generic_services_pb2.pyo
[edit]
[-] symbol_database.pyo
[edit]
[-] unittest_no_arena_import_pb2.pyo
[edit]
[-] __init__.pyc
[edit]
[-] text_encoding.pyo
[edit]
[-] field_mask_pb2.pyc
[edit]
[-] api_pb2.pyo
[edit]
[-] timestamp_pb2.pyo
[edit]
[-] symbol_database.pyc
[edit]
[-] unittest_no_arena_pb2.pyo
[edit]
[-] unittest_proto3_arena_pb2.pyo
[edit]
[-] text_encoding.pyc
[edit]
[-] descriptor_pb2.py
[edit]
[-] unittest_no_arena_import_pb2.pyc
[edit]
[-] service_reflection.py
[edit]
[-] type_pb2.py
[edit]
[-] unittest_no_generic_services_pb2.pyc
[edit]
[-] text_format.pyo
[edit]
[-] symbol_database.py
[edit]
[-] message.py
[edit]
[-] message.pyc
[edit]
[-] unittest_import_pb2.pyo
[edit]
[-] __init__.py
[edit]
[-] service_reflection.pyc
[edit]
[-] reflection.pyo
[edit]
[-] struct_pb2.py
[edit]
[-] any_test_pb2.pyo
[edit]
[-] empty_pb2.py
[edit]
[-] descriptor_pb2.pyc
[edit]
[-] struct_pb2.pyc
[edit]
[-] descriptor_database.py
[edit]
[-] descriptor_pb2.pyo
[edit]
[-] descriptor.pyo
[edit]
[-] field_mask_pb2.py
[edit]
[-] any_pb2.pyc
[edit]
[-] empty_pb2.pyc
[edit]
[-] descriptor_database.pyc
[edit]
[-] descriptor_pool.pyc
[edit]
[-] text_format.pyc
[edit]
[-] source_context_pb2.pyo
[edit]
[-] descriptor_pool.pyo
[edit]
[-] unittest_mset_pb2.pyc
[edit]
[-] message_factory.pyo
[edit]
[-] test_messages_proto3_pb2.pyc
[edit]
[-] source_context_pb2.pyc
[edit]
[-] message.pyo
[edit]
[-] any_pb2.pyo
[edit]
[-] unittest_custom_options_pb2.pyc
[edit]
[-] map_proto2_unittest_pb2.py
[edit]
[-] json_format.pyo
[edit]
[+]
util
[-] map_proto2_unittest_pb2.pyo
[edit]
[-] unittest_mset_wire_format_pb2.py
[edit]
[-] unittest_mset_wire_format_pb2.pyo
[edit]
[-] any_test_pb2.py
[edit]
[-] api_pb2.pyc
[edit]
[-] test_messages_proto3_pb2.pyo
[edit]
[-] unittest_custom_options_pb2.pyo
[edit]
[-] source_context_pb2.py
[edit]
[-] api_pb2.py
[edit]
[-] unittest_import_pb2.pyc
[edit]
[-] map_proto2_unittest_pb2.pyc
[edit]
[-] unittest_no_arena_pb2.py
[edit]
[-] timestamp_pb2.py
[edit]
[-] unittest_mset_pb2.py
[edit]
[-] message_factory.pyc
[edit]
[+]
pyext
[-] unittest_custom_options_pb2.py
[edit]
[-] wrappers_pb2.pyc
[edit]
[-] service.py
[edit]
[-] unittest_no_arena_import_pb2.py
[edit]
[-] service.pyc
[edit]
[-] service.pyo
[edit]
[-] type_pb2.pyc
[edit]
[-] type_pb2.pyo
[edit]
[-] any_test_pb2.pyc
[edit]
[-] json_format.pyc
[edit]
[-] reflection.pyc
[edit]
[-] message_factory.py
[edit]
[-] unittest_pb2.pyo
[edit]
[-] test_messages_proto3_pb2.py
[edit]
[-] text_format.py
[edit]
[-] service_reflection.pyo
[edit]
[-] unittest_arena_pb2.pyc
[edit]
[-] struct_pb2.pyo
[edit]
[-] descriptor_pool.py
[edit]
[-] text_encoding.py
[edit]
[-] map_unittest_pb2.pyo
[edit]
[-] descriptor.pyc
[edit]
[-] unittest_import_public_pb2.py
[edit]
[-] unittest_pb2.py
[edit]