Ë
    ÒÍ:jx  ã                   ó~   — 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y)
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                   óF   — 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y)ÚSymbolDatabasez'A database of Python generated symbols.Nc                 ó>   — |xs t        j                  «       | _        y)z!Initializes a new SymbolDatabase.N)r   ÚDescriptorPoolÚpool)Úselfr
   s     út/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/google/protobuf/symbol_database.pyÚ__init__zSymbolDatabase.__init__2   s   € àÒ8œ×6Ñ6Ó8€D…Ió    c                 ó^   — |j                   }|| 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   s0   € ð ×Ñ€DØ!€D‡M�M�$ÑØ×"Ñ" 4Ô(Ø€Nr   c                 ój   — t        j                  «       dk(  r| j                  j                  |«       yy)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�i×ÑÐ1Õ2ð -r   c                 ój   — t        j                  «       dk(  r| j                  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   s-   € ô ×ÑÓ  HÒ,à
‡i�i×"Ñ" ?Ô3ØÐr   c                 ój   — t        j                  «       dk(  r| j                  j                  |«       yy)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�i×%Ñ%Ð&8Õ9ð -r   c                 ój   — t        j                  «       dk(  r| j                  j                  |«       yy)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�i×*Ñ*¨?Õ;ð -r   c                 óR   — | j                   | 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 ]f  }| j                   j                  |«      }|j                  j                  «       D ],  } ‰|«      D ]  }	 | j                  |   ||j
                  <   Œ! Œ. Œh |S # t        $ r Y Œ3w xY w)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   óZ   •K  — | –— | j                   D ]  } ‰|«      D ]  }|–— Œ Œ y­w)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š   s;   øè ø€ à‚jØ×'Ñ'ò ˆ(Ù*¨8Ó4ò 	ˆKØÓ
ñ	ñùs   ƒ(+)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€iØ×5Ñ5×<Ñ<Ó>ò ˆ(Ù# HÓ-ò 	ˆDðØ%)§]¡]°4Ñ%8ˆF�4—>‘>Ò"ñ	ñðð €Møô ò áðús   ÁA6Á6	B	ÂB	)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r"   r&   r*   r:   © r   r   r   r   ,   s5   „ Ù/ð €(ó9òò$3òò	:ò<ò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      sB   ðñó: å 7Ý +Ý +÷ñ ñD Ð6˜×6Ñ6Ó8Ô9€ór   