def __init__(self, name, package, options=None,
               serialized_options=None, serialized_pb=None,
               dependencies=None, public_dependencies=None,
               syntax=None, pool=None):
    """Constructor."""
    super(FileDescriptor, self).__init__(
        options, serialized_options, 'FileOptions')

    if pool is None:
      from dis_sdk_python.dependency.google.protobuf import descriptor_pool
      pool = descriptor_pool.Default()
    self.pool = pool
    self.message_types_by_name = {}
    self.name = name
    self.package = package
    self.syntax = syntax or "proto2"
    self.serialized_pb = serialized_pb

    self.enum_types_by_name = {}
    self.extensions_by_name = {}
    self.services_by_name = {}
    self.dependencies = (dependencies or [])
    self.public_dependencies = (public_dependencies or [])

    if (api_implementation.Type() == 'cpp' and
        self.serialized_pb is not None):
      _message.default_pool.AddSerializedFile(self.serialized_pb)
  def testFindFileContainingSymbol(self):
    file_desc1 = self.pool.FindFileContainingSymbol(
        'dis_sdk_python.dependency.google.protobuf.python.internal.Factory1Message')
    self.assertIsInstance(file_desc1, descriptor.FileDescriptor)
    self.assertEqual('google/protobuf/internal/factory_test1.proto',
                     file_desc1.name)
    self.assertEqual('dis_sdk_python.dependency.google.protobuf.python.internal', file_desc1.package)
    self.assertIn('Factory1Message', file_desc1.message_types_by_name)

    file_desc2 = self.pool.FindFileContainingSymbol(
        'dis_sdk_python.dependency.google.protobuf.python.internal.Factory2Message')
    self.assertIsInstance(file_desc2, descriptor.FileDescriptor)
    self.assertEqual('google/protobuf/internal/factory_test2.proto',
                     file_desc2.name)
    self.assertEqual('dis_sdk_python.dependency.google.protobuf.python.internal', file_desc2.package)
    self.assertIn('Factory2Message', file_desc2.message_types_by_name)

    # Tests top level extension.
    file_desc3 = self.pool.FindFileContainingSymbol(
        'dis_sdk_python.dependency.google.protobuf.python.internal.another_field')
    self.assertIsInstance(file_desc3, descriptor.FileDescriptor)
    self.assertEqual('google/protobuf/internal/factory_test2.proto',
                     file_desc3.name)

    # Tests nested extension inside a message.
    file_desc4 = self.pool.FindFileContainingSymbol(
        'dis_sdk_python.dependency.google.protobuf.python.internal.Factory2Message.one_more_field')
    self.assertIsInstance(file_desc4, descriptor.FileDescriptor)
    self.assertEqual('google/protobuf/internal/factory_test2.proto',
                     file_desc4.name)

    file_desc5 = self.pool.FindFileContainingSymbol(
        'protobuf_unittest.TestService')
    self.assertIsInstance(file_desc5, descriptor.FileDescriptor)
    self.assertEqual('google/protobuf/unittest.proto',
                     file_desc5.name)

    # Tests the generated pool.
    assert descriptor_pool.Default().FindFileContainingSymbol(
        'dis_sdk_python.dependency.google.protobuf.python.internal.Factory2Message.one_more_field')
    assert descriptor_pool.Default().FindFileContainingSymbol(
        'dis_sdk_python.dependency.google.protobuf.python.internal.another_field')
    assert descriptor_pool.Default().FindFileContainingSymbol(
        'protobuf_unittest.TestService')
Beispiel #3
0
 def testFileDescriptor(self):
     self.assertEqual(self.my_file.name, 'some/filename/some.proto')
     self.assertEqual(self.my_file.package, 'protobuf_unittest')
     self.assertEqual(self.my_file.pool, self.pool)
     self.assertFalse(self.my_file.has_options)
     self.assertEqual('proto2', self.my_file.syntax)
     file_proto = descriptor_pb2.FileDescriptorProto()
     self.my_file.CopyToProto(file_proto)
     self.assertEqual(self.my_file.serialized_pb,
                      file_proto.SerializeToString())
     # Generated modules also belong to the default pool.
     self.assertEqual(unittest_pb2.DESCRIPTOR.pool,
                      descriptor_pool.Default())
Beispiel #4
0
 def _Database(self):
     if descriptor._USE_C_DESCRIPTORS:
         # The C++ implementation does not allow mixing descriptors from
         # different pools.
         db = symbol_database.SymbolDatabase(pool=descriptor_pool.Default())
     else:
         db = symbol_database.SymbolDatabase()
     # Register representative types from unittest_pb2.
     db.RegisterFileDescriptor(unittest_pb2.DESCRIPTOR)
     db.RegisterMessage(unittest_pb2.TestAllTypes)
     db.RegisterMessage(unittest_pb2.TestAllTypes.NestedMessage)
     db.RegisterMessage(unittest_pb2.TestAllTypes.OptionalGroup)
     db.RegisterMessage(unittest_pb2.TestAllTypes.RepeatedGroup)
     db.RegisterEnumDescriptor(unittest_pb2.ForeignEnum.DESCRIPTOR)
     db.RegisterEnumDescriptor(
         unittest_pb2.TestAllTypes.NestedEnum.DESCRIPTOR)
     db.RegisterServiceDescriptor(unittest_pb2._TESTSERVICE)
     return db
    Raises:
      KeyError: if a file could not be found.
    """
        def _GetAllMessages(desc):
            """Walk a message Descriptor and recursively yields all message names."""
            yield desc
            for msg_desc in desc.nested_types:
                for nested_desc in _GetAllMessages(msg_desc):
                    yield nested_desc

        result = {}
        for file_name in files:
            file_desc = self.pool.FindFileByName(file_name)
            for msg_desc in list(file_desc.message_types_by_name.values()):
                for desc in _GetAllMessages(msg_desc):
                    try:
                        result[desc.full_name] = self._classes[desc]
                    except KeyError:
                        # This descriptor has no registered class, skip it.
                        pass
        return result


_DEFAULT = SymbolDatabase(pool=descriptor_pool.Default())


def Default():
    """Returns the default SymbolDatabase."""
    return _DEFAULT
 def setUp(self):
   self.pool = descriptor_pool.Default()
   self.factory_test1_fd = descriptor_pb2.FileDescriptorProto.FromString(
       factory_test1_pb2.DESCRIPTOR.serialized_pb)
   self.factory_test2_fd = descriptor_pb2.FileDescriptorProto.FromString(
       factory_test2_pb2.DESCRIPTOR.serialized_pb)