
    q	hx                     x    S r SSKrSSKJr  SSKJr  SSKJr   " S S5      r\" \R                  " 5       S9r	S	 rg)
aS  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')()
    N)api_implementation)descriptor_pool)message_factoryc                   P    \ rS rSrSr0 rSS jrS rS rS r	S r
S	 rS
 rS rSrg)SymbolDatabase,   z'A database of Python generated symbols.Nc                 J    U=(       d    [         R                  " 5       U l        g)z!Initializes a new SymbolDatabase.N)r   DescriptorPoolpool)selfr   s     Q/var/www/html/env/lib/python3.13/site-packages/google/protobuf/symbol_database.py__init__SymbolDatabase.__init__2   s    8668DI    c                 \    UR                   nXR                  U'   U R                  U5        U$ )a$  Registers the given message type in the local database.

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

Args:
  message: A :class:`google.protobuf.message.Message` subclass (or
    instance); its descriptor will be registered.

Returns:
  The provided message.
)
DESCRIPTOR_classesRegisterMessageDescriptor)r   messagedescs      r   RegisterMessageSymbolDatabase.RegisterMessage6   s.     D!MM$""4(Nr   c                 n    [         R                  " 5       S:X  a  U R                  R                  U5        gg)zRegisters the given message descriptor in the local database.

Args:
  message_descriptor (Descriptor): the message descriptor to add.
pythonN)r   Typer   _AddDescriptor)r   message_descriptors     r   r   (SymbolDatabase.RegisterMessageDescriptorH   s-      H,
ii12 -r   c                 n    [         R                  " 5       S:X  a  U R                  R                  U5        U$ )zRegisters the given enum descriptor in the local database.

Args:
  enum_descriptor (EnumDescriptor): The enum descriptor to register.

Returns:
  EnumDescriptor: The provided descriptor.
r   )r   r   r   _AddEnumDescriptor)r   enum_descriptors     r   RegisterEnumDescriptor%SymbolDatabase.RegisterEnumDescriptorR   s-      H,
ii""?3r   c                 n    [         R                  " 5       S:X  a  U R                  R                  U5        gg)zRegisters the given service descriptor in the local database.

Args:
  service_descriptor (ServiceDescriptor): the service descriptor to
    register.
r   N)r   r   r   _AddServiceDescriptor)r   service_descriptors     r   RegisterServiceDescriptor(SymbolDatabase.RegisterServiceDescriptor`   s-      H,
ii%%&89 -r   c                 n    [         R                  " 5       S:X  a  U R                  R                  U5        gg)zRegisters the given file descriptor in the local database.

Args:
  file_descriptor (FileDescriptor): The file descriptor to register.
r   N)r   r   r   _InternalAddFileDescriptor)r   file_descriptors     r   RegisterFileDescriptor%SymbolDatabase.RegisterFileDescriptork   s,      H,
ii**?; -r   c                 R    U R                   U R                  R                  U5         $ )aS  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.

Args:
  symbol (str): a protocol buffer symbol.

Returns:
  A Python class corresponding to the symbol.

Raises:
  KeyError: if the symbol could not be found.
)r   r   FindMessageTypeByName)r   symbols     r   	GetSymbolSymbolDatabase.GetSymbolu   s"      ==88@AAr   c                   ^ U4S jm0 nU Hj  nU R                   R                  U5      nUR                  R                  5        H.  nT" U5       H  n U R                  U   X&R
                  '   M!     M0     Ml     U$ ! [         a     M:  f = f)a  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.

Args:
  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.
c              3   b   >#    U v   U R                    H  nT" U5       H  nUv   M	     M     g7f)zCWalk a message Descriptor and recursively yields all message names.N)nested_types)r   msg_descnested_desc_GetAllMessagess      r   r8   3SymbolDatabase.GetMessages.<locals>._GetAllMessages   s0     j''(*84K
 5 (s   ,/)r   FindFileByNamemessage_types_by_namevaluesr   	full_nameKeyError)r   filesresult	file_name	file_descr6   r   r8   s          @r   GetMessagesSymbolDatabase.GetMessages   s    & F	))**95i55<<>(#H-D%)]]4%8F>>" . ?  M  s   A<<
B
		B
	r   )N)__name__
__module____qualname____firstlineno____doc__r   r   r   r   r"   r'   r,   r1   rC   __static_attributes__ r   r   r   r   ,   s5    / (9$3	:<B$$r   r   rE   c                      [         $ )z#Returns the default SymbolDatabase.)_DEFAULTrL   r   r   DefaultrO      s    	/r   )
rJ   warningsgoogle.protobuf.internalr   google.protobufr   r   r   rO   rN   rL   r   r   <module>rS      s?   :  7 + + D 6689r   