o
    MQ8j                     @   sr   d Z dZddlmZmZm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dedee fddZdS )z*Provides a container for DescriptorProtos.z"matthewtoia@google.com (Matt Toia)    )DictIteratorOptionalNc                   @   s   e Zd ZdS )ErrorN)__name__
__module____qualname__ r	   r	   j/home/nk/hobo-godmode/plappi-mvp/.venv/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                   @   s   e Zd ZdZdddZddd	Zd
eddfddZdeddfddZdede	de
d fddZdedee	 fddZd
eddddfddZdS )DescriptorDatabasezEA container accepting FileDescriptorProtos and maps DescriptorProtos.returnNc                 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__file_desc_proto"descriptor_pb2.FileDescriptorProtoc           
      C   s"  |j }|| jvr|| j|< n| j| |krtd| dS |j}|jD ]}t||D ]}| || q*q#|jD ])}| |rEd||j fn|j | |j	D ]}|| j
|r\d||j fn|j < qMq7|jD ]}| |rrd||j fn|j | qd|jD ]}	| |rd||	j fn|	j | q{d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   packagemessage_type_ExtractSymbols
_AddSymbol	enum_typejoinvaluer   	extensionservice)
r   r   
proto_namer   messager   enum
enum_valuer   r    r	   r	   r
   Add#   sF   






zDescriptorDatabase.Addr   c                 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
   FindFileByNameO   s   
z!DescriptorDatabase.FindFileByNamesymbolc                 C   s   | ddkr|d dkr|d}tdt z| j| W S  tyA   |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   zaPlease remove the leading "." when FindFileContainingSymbol, this will turn to error in 2026 Jan.)countlstripwarningswarnRuntimeWarningr   KeyError
rpartition)r   r'   	top_level_r	   r	   r
   FindFileContainingSymbolb   s    
z+DescriptorDatabase.FindFileContainingSymbolextendee_nameextension_numberc                 C   s   d S r   r	   )r   r3   r4   r	   r	   r
   FindFileContainingExtension   s   z.DescriptorDatabase.FindFileContainingExtensionc                 C   s   g S r   r	   )r   r3   r	   r	   r
   FindAllExtensionNumbers   s   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   r+   r,   r-   )r   r   r   warn_msgr	   r	   r
   r      s   

zDescriptorDatabase._AddSymbol)r   N)r   r   r   N)r   r   r   r   r   r%   strr&   r2   intr   r5   listr6   r   r	   r	   r	   r
   r      s2    

,
/
r   
desc_protozdescriptor_pb2.DescriptorProtor   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 )zPulls 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   )r<   r   message_namer=   r'   r   r	   r	   r
   r      s   

r   )r   
__author__typingr   r   r   r+   	Exceptionr   r   objectr   r9   r   r	   r	   r	   r
   <module>   s    