google.protobuf.symbol_database

A database of Python protocol buffer generated symbols.

SymbolDatabase is the MessageFactory for messages generated at compile time, and makes it easy to create new instances of a registered type, given only the type’s protocol buffer symbol name.

Example usage:

db = symbol_database.SymbolDatabase()

# Register symbols of interest, from one or multiple files.
db.RegisterFileDescriptor(my_proto_pb2.DESCRIPTOR)
db.RegisterMessage(my_proto_pb2.MyMessage)
db.RegisterEnumDescriptor(my_proto_pb2.MyEnum.DESCRIPTOR)

# The database can be used as a MessageFactory, to generate types based on
# their name:
types = db.GetMessages(['my_proto.proto'])
my_message_instance = types['MyMessage']()

# The database's underlying descriptor pool can be queried, so it's not
# necessary to know a type's filename to be able to generate it:
filename = db.pool.FindFileContainingSymbol('MyMessage')
my_message_instance = db.GetMessages([filename])['MyMessage']()

# This functionality is also provided directly via a convenience method:
my_message_instance = db.GetSymbol('MyMessage')()
google.protobuf.symbol_database.Default()

Returns the default SymbolDatabase.

class google.protobuf.symbol_database.SymbolDatabase(pool=None)

A database of Python generated symbols.

CreatePrototype(descriptor)

Builds a proto2 message class based on the passed in descriptor.

Don’t call this function directly, it always creates a new class. Call GetPrototype() instead. This method is meant to be overridden in subblasses to perform additional operations on the newly constructed class.

Parameters:

descriptor – The descriptor to build from.

Returns:

A class describing the passed in descriptor.

GetMessages(files)

Gets all registered messages from a specified file.

Only messages already created and registered will be returned; (this is the case for imported _pb2 modules) But unlike MessageFactory, this version also returns already defined nested messages, but does not register any message extensions.

Parameters:

files (list[str]) – The file names to extract messages from.

Returns:

A dictionary mapping proto names to the message classes.

Raises:

KeyError – if a file could not be found.

GetPrototype(descriptor)

Obtains a proto2 message class based on the passed in descriptor.

Passing a descriptor with a fully qualified name matching a previous invocation will cause the same class to be returned.

Parameters:

descriptor – The descriptor to build from.

Returns:

A class describing the passed in descriptor.

GetSymbol(symbol)

Tries to find a symbol in the local database.

Currently, this method only returns message.Message instances, however, if may be extended in future to support other symbol types.

Parameters:

symbol (str) – a protocol buffer symbol.

Returns:

A Python class corresponding to the symbol.

Raises:

KeyError – if the symbol could not be found.

RegisterEnumDescriptor(enum_descriptor)

Registers the given enum descriptor in the local database.

Parameters:

enum_descriptor (EnumDescriptor) – The enum descriptor to register.

Returns:

The provided descriptor.

Return type:

EnumDescriptor

RegisterFileDescriptor(file_descriptor)

Registers the given file descriptor in the local database.

Parameters:

file_descriptor (FileDescriptor) – The file descriptor to register.

RegisterMessage(message)

Registers the given message type in the local database.

Calls to GetSymbol() and GetMessages() will return messages registered here.

Parameters:

message – A google.protobuf.message.Message subclass (or instance); its descriptor will be registered.

Returns:

The provided message.

RegisterMessageDescriptor(message_descriptor)

Registers the given message descriptor in the local database.

Parameters:

message_descriptor (Descriptor) – the message descriptor to add.

RegisterServiceDescriptor(service_descriptor)

Registers the given service descriptor in the local database.

Parameters:

service_descriptor (ServiceDescriptor) – the service descriptor to register.