§
    YŠtjx  ã                   óˆ   — d Z ddlZddlmZ ddlmZ ddlmZ  G d„ d¦  «        Z e ej        ¦   «         ¬¦  «        Z	d	„ ZdS )
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                   óH   — e Zd ZdZi Zdd„Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ ZdS )ÚSymbolDatabasez'A database of Python generated symbols.Nc                 ó:   — |pt          j        ¦   «         | _        dS )z!Initializes a new SymbolDatabase.N)r   ÚDescriptorPoolÚpool)Úselfr
   s     ú]/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/google/protobuf/symbol_database.pyÚ__init__zSymbolDatabase.__init__2   s   € àÐ8�Ô6Ñ8Ô8€D„I€I€Ió    c                 óR   — |j         }|| j        |<   |                      |¦  «         |S )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   ÚRegisterMessagezSymbolDatabase.RegisterMessage6   s1   € ð Ô€DØ!€D„M�$ÑØ×"Ò" 4Ñ(Ô(Ð(Ø€Nr   c                 ól   — t          j        ¦   «         dk    r| j                             |¦  «         dS dS )z“Registers 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   z(SymbolDatabase.RegisterMessageDescriptorH   s=   € õ ÔÑ Ô  HÒ,Ð,à
„i×ÒÐ1Ñ2Ô2Ð2Ð2Ð2ð -Ð,r   c                 óh   — t          j        ¦   «         dk    r| j                             |¦  «         |S )zÐRegisters 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   ÚRegisterEnumDescriptorz%SymbolDatabase.RegisterEnumDescriptorR   s4   € õ ÔÑ Ô  HÒ,Ð,à
„i×"Ò" ?Ñ3Ô3Ð3ØÐr   c                 ól   — t          j        ¦   «         dk    r| j                             |¦  «         dS dS )z§Registers 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   ÚRegisterServiceDescriptorz(SymbolDatabase.RegisterServiceDescriptor`   s=   € õ ÔÑ Ô  HÒ,Ð,à
„i×%Ò%Ð&8Ñ9Ô9Ð9Ð9Ð9ð -Ð,r   c                 ól   — t          j        ¦   «         dk    r| j                             |¦  «         dS dS )z“Registers 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   ÚRegisterFileDescriptorz%SymbolDatabase.RegisterFileDescriptork   s<   € õ ÔÑ Ô  HÒ,Ð,à
„i×*Ò*¨?Ñ;Ô;Ð;Ð;Ð;ð -Ð,r   c                 óL   — | j         | j                             |¦  «                 S )aw  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   Ú	GetSymbolzSymbolDatabase.GetSymbolu   s!   € ð  Œ=˜œ×8Ò8¸Ñ@Ô@ÔAÐAr   c                 óô   ‡— ˆfd„Ši }|D ]l}| j                              |¦  «        }|j                             ¦   «         D ]6} ‰|¦  «        D ](}	 | j        |         ||j        <   Œ# t          $ r Y Œ%w xY wŒ7Œm|S )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   óL   •K  — | V — | j         D ]} ‰|¦  «        D ]}|V — ŒŒdS )zCWalk a message Descriptor and recursively yields all message names.N)Únested_types)r   Úmsg_descÚnested_descÚ_GetAllMessagess      €r   r0   z3SymbolDatabase.GetMessages.<locals>._GetAllMessagesš   sY   øè è € à€j€j€jØÔ'ð ð ˆ(Ø*˜?¨8Ñ4Ô4ð 	ð 	ˆKØÐ
Ð
Ð
Ð
ð	ðð r   )r
   ÚFindFileByNameÚmessage_types_by_nameÚvaluesr   Ú	full_nameÚKeyError)r   ÚfilesÚresultÚ	file_nameÚ	file_descr.   r   r0   s          @r   ÚGetMessageszSymbolDatabase.GetMessages‡   sÊ   ø€ ð&ð ð ð ð ð €FØð ð ˆ	Ø”)×*Ò*¨9Ñ5Ô5€iØÔ5×<Ò<Ñ>Ô>ð ð ˆ(Ø#�O HÑ-Ô-ð 	ð 	ˆDðØ%)¤]°4Ô%8ˆF�4”>Ñ"Ð"øÝð ð ð àˆDðøøøð	ðð €Ms   ÁA&Á&
A3	Á2A3	)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r"   r&   r*   r:   © r   r   r   r   ,   s¡   € € € € € Ø/Ð/ð €(ð9ð 9ð 9ð 9ðð ð ð$3ð 3ð 3ðð ð ð	:ð 	:ð 	:ð<ð <ð <ðBð Bð Bð$$ð $ð $ð $ð $r   r   )r
   c                  ó   — t           S )z#Returns the default SymbolDatabase.)Ú_DEFAULTr?   r   r   ÚDefaultrB   ±   s   € å	€/r   )
r>   ÚwarningsÚgoogle.protobuf.internalr   Úgoogle.protobufr   r   r   rB   rA   r?   r   r   ú<module>rF      sº   ððð ð: €€€à 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø +Ð +Ð +Ð +Ð +Ð +Ø +Ð +Ð +Ð +Ð +Ð +ðð ð ð ð ñ ô ð ðD ˆ>Ð6˜Ô6Ñ8Ô8Ð9Ñ9Ô9€ðð ð ð ð r   