<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3
h                 @   sH   d Z ddlmZ ddlmZ G dd dejZeej dZdd Zd	S )
aR  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')()
    )descriptor_pool)message_factoryc               @   sH   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dS )SymbolDatabasez'A database of Python generated symbols.c             C   s   |j }|| j|< | j| |S )zRegisters 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RegisterMessageD   s    

zSymbolDatabase.RegisterMessagec             C   s   | j j| dS )zRegisters the given message descriptor in the local database.

    Args:
      message_descriptor: a descriptor.MessageDescriptor.
    N)poolZAddDescriptor)r   Zmessage_descriptorr
   r
   r   r   U   s    z(SymbolDatabase.RegisterMessageDescriptorc             C   s   | j j| |S )zRegisters the given enum descriptor in the local database.

    Args:
      enum_descriptor: a descriptor.EnumDescriptor.

    Returns:
      The provided descriptor.
    )r   ZAddEnumDescriptor)r   Zenum_descriptorr
   r
   r   RegisterEnumDescriptor]   s    	z%SymbolDatabase.RegisterEnumDescriptorc             C   s   | j j| dS )zRegisters the given service descriptor in the local database.

    Args:
      service_descriptor: a descriptor.ServiceDescriptor.

    Returns:
      The provided descriptor.
    N)r   ZAddServiceDescriptor)r   Zservice_descriptorr
   r
   r   RegisterServiceDescriptori   s    	z(SymbolDatabase.RegisterServiceDescriptorc             C   s   | j j| dS )zRegisters the given file descriptor in the local database.

    Args:
      file_descriptor: a descriptor.FileDescriptor.

    Returns:
      The provided descriptor.
    N)r   ZAddFileDescriptor)r   Zfile_descriptorr
   r
   r   RegisterFileDescriptort   s    	z%SymbolDatabase.RegisterFileDescriptorc             C   s   | j | jj| S )ax  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: A str, a protocol buffer symbol.

    Returns:
      A Python class corresponding to the symbol.

    Raises:
      KeyError: if the symbol could not be found.
    )r   r   ZFindMessageTypeByName)r   Zsymbolr
   r
   r   	GetSymbol   s    zSymbolDatabase.GetSymbolc                s    fdd i }xl|D ]d}| j j|}xRt|jj D ]@}x: |D ].}y| j| ||j< W qD tk
rp   Y qDX qDW q6W qW |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: 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   s2   | V  x&| j D ]}x |D ]
}|V  qW qW dS )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.<locals>._GetAllMessages)r   ZFindFileByNamelistZmessage_types_by_namevaluesr   Z	full_nameKeyError)r   filesresult	file_nameZ	file_descr   r	   r
   )r   r   GetMessages   s    
zSymbolDatabase.GetMessagesN)__name__
__module____qualname____doc__r   r   r   r   r   r   r   r
   r
   r
   r   r   A   s   r   )r   c               C   s   t S )z#Returns the default SymbolDatabase.)_DEFAULTr
   r
   r
   r   Default   s    r    N)r   Zgoogle.protobufr   r   ZMessageFactoryr   r    r   r
   r
   r
   r   <module>:   s
   w