def testgetprototype(self): db = descriptor_database.descriptordatabase() pool = descriptor_pool.descriptorpool(db) db.add(self.factory_test1_fd) db.add(self.factory_test2_fd) factory = message_factory.messagefactory() cls = factory.getprototype(pool.findmessagetypebyname( 'net.proto2.python.internal.factory2message')) self.assertisnot(cls, factory_test2_pb2.factory2message) self._exercisedynamicclass(cls) cls2 = factory.getprototype(pool.findmessagetypebyname( 'net.proto2.python.internal.factory2message')) self.assertis(cls, cls2)
def testadd(self): db = descriptor_database.descriptordatabase() file_desc_proto = descriptor_pb2.filedescriptorproto.fromstring( factory_test2_pb2.descriptor.serialized_pb) db.add(file_desc_proto) self.assertequals(file_desc_proto, db.findfilebyname( 'net/proto2/python/internal/factory_test2.proto')) self.assertequals(file_desc_proto, db.findfilecontainingsymbol( 'net.proto2.python.internal.factory2message')) self.assertequals(file_desc_proto, db.findfilecontainingsymbol( 'net.proto2.python.internal.factory2message.nestedfactory2message')) self.assertequals(file_desc_proto, db.findfilecontainingsymbol( 'net.proto2.python.internal.factory2enum')) self.assertequals(file_desc_proto, db.findfilecontainingsymbol( 'net.proto2.python.internal.factory2message.nestedfactory2enum'))
def __init__(self, descriptor_db=none): """initializes a pool of proto buffs. the descriptor_db argument to the constructor is provided to allow specialized file descriptor proto lookup code to be triggered on demand. an example would be an implementation which will read and compile a file specified in a call to findfilebyname() and not require the call to add() at all. results from this database will be cached internally here as well. args: descriptor_db: a secondary source of file descriptors. """ self._internal_db = descriptor_database.descriptordatabase() self._descriptor_db = descriptor_db self._descriptors = {} self._enum_descriptors = {} self._file_descriptors = {}
a class describing the passed in descriptor. """ if descriptor.full_name not in self._classes: result_class = reflection.generatedprotocolmessagetype( descriptor.name.encode('ascii', 'ignore'), (message.message,), {'descriptor': descriptor}) self._classes[descriptor.full_name] = result_class for field in descriptor.fields: if field.message_type: self.getprototype(field.message_type) return self._classes[descriptor.full_name] _db = descriptor_database.descriptordatabase() _pool = descriptor_pool.descriptorpool(_db) _factory = messagefactory() def getmessages(file_protos): """builds a dictionary of all the messages available in a set of files. args: file_protos: a sequence of file protos to build messages out of. returns: a dictionary containing all the message types in the files mapping the fully qualified name to a message subclass for the descriptor. """