Go to the documentation of this file.
31 """A database of Python protocol buffer generated symbols.
33 SymbolDatabase is the MessageFactory for messages generated at compile time,
34 and makes it easy to create new instances of a registered type, given only the
35 type's protocol buffer symbol name.
39 db = symbol_database.SymbolDatabase()
41 # Register symbols of interest, from one or multiple files.
42 db.RegisterFileDescriptor(my_proto_pb2.DESCRIPTOR)
43 db.RegisterMessage(my_proto_pb2.MyMessage)
44 db.RegisterEnumDescriptor(my_proto_pb2.MyEnum.DESCRIPTOR)
46 # The database can be used as a MessageFactory, to generate types based on
48 types = db.GetMessages(['my_proto.proto'])
49 my_message_instance = types['MyMessage']()
51 # The database's underlying descriptor pool can be queried, so it's not
52 # necessary to know a type's filename to be able to generate it:
53 filename = db.pool.FindFileContainingSymbol('MyMessage')
54 my_message_instance = db.GetMessages([filename])['MyMessage']()
56 # This functionality is also provided directly via a convenience method:
57 my_message_instance = db.GetSymbol('MyMessage')()
66 """A database of Python generated symbols."""
69 """Registers the given message type in the local database.
71 Calls to GetSymbol() and GetMessages() will return messages registered here.
74 message: a message.Message, to be registered.
80 desc = message.DESCRIPTOR
86 """Registers the given message descriptor in the local database.
89 message_descriptor: a descriptor.MessageDescriptor.
94 """Registers the given enum descriptor in the local database.
97 enum_descriptor: a descriptor.EnumDescriptor.
100 The provided descriptor.
103 return enum_descriptor
106 """Registers the given service descriptor in the local database.
109 service_descriptor: a descriptor.ServiceDescriptor.
112 The provided descriptor.
117 """Registers the given file descriptor in the local database.
120 file_descriptor: a descriptor.FileDescriptor.
123 The provided descriptor.
128 """Tries to find a symbol in the local database.
130 Currently, this method only returns message.Message instances, however, if
131 may be extended in future to support other symbol types.
134 symbol: A str, a protocol buffer symbol.
137 A Python class corresponding to the symbol.
140 KeyError: if the symbol could not be found.
143 return self.
_classes[self.
pool.FindMessageTypeByName(symbol)]
147 """Gets all registered messages from a specified file.
149 Only messages already created and registered will be returned; (this is the
150 case for imported _pb2 modules)
151 But unlike MessageFactory, this version also returns already defined nested
152 messages, but does not register any message extensions.
155 files: The file names to extract messages from.
158 A dictionary mapping proto names to the message classes.
161 KeyError: if a file could not be found.
164 def _GetAllMessages(desc):
165 """Walk a message Descriptor and recursively yields all message names."""
167 for msg_desc
in desc.nested_types:
168 for nested_desc
in _GetAllMessages(msg_desc):
172 for file_name
in files:
174 for msg_desc
in file_desc.message_types_by_name.values():
175 for desc
in _GetAllMessages(msg_desc):
177 result[desc.full_name] = self.
_classes[desc]
188 """Returns the default SymbolDatabase."""
def RegisterFileDescriptor(self, file_descriptor)
static PyObject * AddEnumDescriptor(PyObject *self, PyObject *descriptor)
static PyObject * FindFileByName(PyObject *self, PyObject *arg)
def RegisterEnumDescriptor(self, enum_descriptor)
def GetMessages(self, files)
static PyObject * AddServiceDescriptor(PyObject *self, PyObject *descriptor)
static PyObject * AddFileDescriptor(PyObject *self, PyObject *descriptor)
def GetSymbol(self, symbol)
static PyObject * AddDescriptor(PyObject *self, PyObject *descriptor)
def RegisterMessageDescriptor(self, message_descriptor)
def RegisterMessage(self, message)
def RegisterServiceDescriptor(self, service_descriptor)
libaditof
Author(s):
autogenerated on Wed May 21 2025 02:06:59