o
    ë©ZhD  ã                   @   sL   d Z dZddlZG dd„ deƒZG dd„ deƒZG dd	„ d	eƒZd
d„ ZdS )z*Provides a container for DescriptorProtos.z"matthewtoia@google.com (Matt Toia)é    Nc                   @   s   e Zd ZdS )ÚErrorN)Ú__name__Ú
__module__Ú__qualname__© r   r   úZ/var/www/html/lang_env/lib/python3.10/site-packages/google/protobuf/descriptor_database.pyr      s    r   c                   @   s   e Zd ZdZdS )Ú,DescriptorDatabaseConflictingDefinitionErrorzGRaised when a proto is added with the same name & different descriptor.N)r   r   r   Ú__doc__r   r   r   r   r      s    r   c                   @   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 )ÚDescriptorDatabasezEA container accepting FileDescriptorProtos and maps DescriptorProtos.c                 C   s   i | _ i | _d S ©N)Ú_file_desc_protos_by_fileÚ_file_desc_protos_by_symbol)Úselfr   r   r   Ú__init__   s   
zDescriptorDatabase.__init__c           
      C   sú   |j }|| jvr|| j|< n| j| |krtd| ƒ‚dS |j}|jD ]}t||ƒD ]}|  ||¡ q*q#|jD ]}|  d ||j f¡|¡ |j	D ]}|| j
d ||j f¡< qHq7|jD ]}|  d ||j f¡|¡ qZ|jD ]}	|  d ||	j f¡|¡ qldS )aL  Adds the FileDescriptorProto and its types to this database.

    Args:
      file_desc_proto: The FileDescriptorProto to add.
    Raises:
      DescriptorDatabaseConflictingDefinitionError: if an attempt is made to
        add a proto with the same name but different definition than an
        existing proto in the database.
    z0%s already added, but with different descriptor.NÚ.)Únamer   r   ÚpackageZmessage_typeÚ_ExtractSymbolsÚ
_AddSymbolÚ	enum_typeÚjoinÚvaluer   Ú	extensionÚservice)
r   Úfile_desc_protoZ
proto_namer   Úmessager   ÚenumZ
enum_valuer   r   r   r   r   ÚAdd   s4   

ÿ
ÿ

ÿÿÿ

ÿzDescriptorDatabase.Addc                 C   s
   | j | S )a¸  Finds the file descriptor proto by file name.

    Typically the file name is a relative path ending to a .proto file. The
    proto with the given name will have to have been added to this database
    using the Add method or else an error will be raised.

    Args:
      name: The file name to find.

    Returns:
      The file descriptor proto matching the name.

    Raises:
      KeyError if no file by the given name was added.
    )r   )r   r   r   r   r   ÚFindFileByName@   s   
z!DescriptorDatabase.FindFileByNamec                 C   sT   z| j | W S  ty)   | d¡\}}}z| j | W  Y S  ty(   t|ƒ‚w w )a¢  Finds the file descriptor proto containing the specified symbol.

    The symbol should be a fully qualified name including the file descriptor's
    package and any containing messages. Some examples:

    'some.package.name.Message'
    'some.package.name.Message.NestedEnum'
    'some.package.name.Message.some_field'

    The file descriptor proto containing the specified symbol must be added to
    this database using the Add method or else an error will be raised.

    Args:
      symbol: The fully qualified symbol name.

    Returns:
      The file descriptor proto containing the symbol.

    Raises:
      KeyError if no file contains the specified symbol.
    r   )r   ÚKeyErrorÚ
rpartition)r   ÚsymbolZ	top_levelÚ_r   r   r   ÚFindFileContainingSymbolS   s   þ÷z+DescriptorDatabase.FindFileContainingSymbolc                 C   s   d S r   r   )r   Úextendee_nameZextension_numberr   r   r   ÚFindFileContainingExtensionx   ó   z.DescriptorDatabase.FindFileContainingExtensionc                 C   s   g S r   r   )r   r$   r   r   r   ÚFindAllExtensionNumbers|   r&   z*DescriptorDatabase.FindAllExtensionNumbersc                 C   sJ   || j v rd|j d | d | j | j d }t |t¡ || j |< d S )NzConflict register for file "z": z is already defined in file "ú")r   r   ÚwarningsÚwarnÚRuntimeWarning)r   r   r   Zwarn_msgr   r   r   r   €   s   
ÿÿþ
ýýzDescriptorDatabase._AddSymbolN)r   r   r   r	   r   r   r   r#   r%   r'   r   r   r   r   r   r
      s    "%r
   c                 c   sd    |r
|d | j  n| j }|V  | jD ]}t||ƒD ]}|V  qq| jD ]}d ||j f¡V  q$dS )zëPulls out all the symbols from a descriptor proto.

  Args:
    desc_proto: The proto to extract symbols from.
    package: The package containing the descriptor type.

  Yields:
    The fully qualified name found in the descriptor.
  r   N)r   Únested_typer   r   r   )Z
desc_protor   Zmessage_namer,   r!   r   r   r   r   r   Š   s   €

ÿ
ÿr   )	r	   Ú
__author__r)   Ú	Exceptionr   r   Úobjectr
   r   r   r   r   r   Ú<module>   s   s