3 SÉLjã@sHdZddlmZddlmZGdd„dejƒZeejƒd�Zdd„Zd S) aRA 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')() é)Údescriptor_pool)Úmessage_factoryc@sHeZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dS)ÚSymbolDatabasez'A database of Python generated symbols.cCs|j}||j|<|j|ƒ|S)z÷Registers the given message type in the local database. Calls to GetSymbol() and GetMessages() will return messages registered here. Args: message: a message.Message, to be registered. Returns: The provided message. )Z DESCRIPTORÚ_classesÚRegisterMessageDescriptor)ÚselfÚmessageÚdesc©r ú%/usr/lib/python3.6/symbol_database.pyÚRegisterMessageDs   zSymbolDatabase.RegisterMessagecCs|jj|ƒdS)z‡Registers the given message descriptor in the local database. Args: message_descriptor: a descriptor.MessageDescriptor. N)ÚpoolZ AddDescriptor)rZmessage_descriptorr r r rUsz(SymbolDatabase.RegisterMessageDescriptorcCs|jj|ƒ|S)z«Registers the given enum descriptor in the local database. Args: enum_descriptor: a descriptor.EnumDescriptor. Returns: The provided descriptor. )r ZAddEnumDescriptor)rZenum_descriptorr r r ÚRegisterEnumDescriptor]s z%SymbolDatabase.RegisterEnumDescriptorcCs|jj|ƒdS)z´Registers the given service descriptor in the local database. Args: service_descriptor: a descriptor.ServiceDescriptor. Returns: The provided descriptor. N)r ZAddServiceDescriptor)rZservice_descriptorr r r ÚRegisterServiceDescriptoris z(SymbolDatabase.RegisterServiceDescriptorcCs|jj|ƒdS)z«Registers the given file descriptor in the local database. Args: file_descriptor: a descriptor.FileDescriptor. Returns: The provided descriptor. N)r ZAddFileDescriptor)rZfile_descriptorr r r ÚRegisterFileDescriptorts z%SymbolDatabase.RegisterFileDescriptorcCs|j|jj|ƒS)axTries 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. Args: symbol: A str, a protocol buffer symbol. Returns: A Python class corresponding to the symbol. Raises: KeyError: if the symbol could not be found. )rr ZFindMessageTypeByName)rZsymbolr r r Ú GetSymbolszSymbolDatabase.GetSymbolcs~‡fdd„‰i}xh|D]`}|jj|ƒ}xN|jjƒD]@}x:ˆ|ƒD].}y|j|||j<Wq@tk rlYq@Xq@Wq2WqW|S)aGets 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. Args: files: 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. c3s2|Vx&|jD]}xˆ|ƒD] }|VqWqWdS)zCWalk a message Descriptor and recursively yields all message names.N)Z nested_types)r Úmsg_descZ nested_desc)Ú_GetAllMessagesr r r¤s z3SymbolDatabase.GetMessages.._GetAllMessages)r ZFindFileByNameZmessage_types_by_nameÚvaluesrZ full_nameÚKeyError)rÚfilesÚresultÚ file_nameZ file_descrr r )rr Ú GetMessages‘s   zSymbolDatabase.GetMessagesN) Ú__name__Ú __module__Ú __qualname__Ú__doc__r rrrrrrr r r r rAs   r)r cCstS)z#Returns the default SymbolDatabase.)Ú_DEFAULTr r r r ÚDefault»srN)rZgoogle.protobufrrZMessageFactoryrrrr r r r Ú:s   w