Ë
    }\;j   ã                   óŒ   — d Z ddlmZ ddlmZ ddlmZ  G d„ dej                  «      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')()
é    )Úapi_implementation)Údescriptor_pool)Úmessage_factoryc                   ó:   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
y	)
ÚSymbolDatabasez'A database of Python generated symbols.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)ÚselfÚmessageÚdescs      úhG:\00. PROJECTS\API\Inventory\templateJSON\kerjaOCR\Lib\site-packages\google/protobuf/symbol_database.pyÚRegisterMessagezSymbolDatabase.RegisterMessageE   s0   € ð ×Ñ€DØ!€D‡M�M�$ÑØ×"Ñ" 4Ô(Ø€Nó    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   ÚTypeÚpoolÚ_AddDescriptor)r   Úmessage_descriptors     r   r   z(SymbolDatabase.RegisterMessageDescriptorW   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.RegisterEnumDescriptora   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.RegisterServiceDescriptoro   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.RegisterFileDescriptorz   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.GetSymbol„   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   r-   z3SymbolDatabase.GetMessages.<locals>._GetAllMessages©   s1   øè ø€ à‚jØ×'Ô'ˆ(Ù*¨8Ö4ˆKØÓ
ñ 5ñ (ùs   ƒ(+)r   ÚFindFileByNameÚmessage_types_by_nameÚvaluesr
   Ú	full_nameÚKeyError)r   ÚfilesÚresultÚ	file_nameÚ	file_descr+   r   r-   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'   r7   © r   r   r   r   B   s)   „ Ù/òò$3òò	:ò<òBó$$r   r   )r   c                  ó   — t         S )z#Returns the default SymbolDatabase.)Ú_DEFAULTr<   r   r   ÚDefaultr?   À   s   € ä	€/r   N)
r;   Úgoogle.protobuf.internalr   Úgoogle.protobufr   r   ÚMessageFactoryr   r?   r>   r<   r   r   Ú<module>rC      sG   ðñ>õ< 8Ý +Ý +ôx�_×3Ñ3ô xñv Ð6˜×6Ñ6Ó8Ô9€ór   