
    ij                        d Z ddlmZ ddlmZ ddlmZmZmZm	Z	m
Z
mZmZ ddlmZmZmZmZmZ ddlmZ eZeeef   Zeeef   Zedee   f   Z G d de      Zy	)
zCImplementation of the metadata abstraction for gRPC Asyncio Python.    )annotations)OrderedDict)
Collection	ItemsViewIterableIteratorKeysViewSequence
ValuesView)AnyListOptionalTupleUnion)SelfMetadatac                      e Zd ZdZddZedd       Ze	 	 	 	 dd       ZddZddZ	ddZ
ddZdd	Zdd
ZddZddZd dZd!dZ	 d"	 	 	 	 	 d#dZd$dZd%dZd&dZd'dZd(dZd)dZy)*r   a  Metadata abstraction for the asynchronous calls and interceptors.

    The metadata is a mapping from str -> List[str]

    Traits
        * Multiple entries are allowed for the same key
        * The order of the values by key is preserved
        * Getting by an element by key, retrieves the first mapped value
        * Supports an immutable view of the data
        * Allows partial mutation on the data without recreating the new object from scratch.
    c                Z    t               | _        |D ]  \  }}| j                  ||        y N)r   	_metadataadd)selfargsmd_keymd_values       g/var/www/html/emotional.easysim.app/public_html/venv/lib/python3.12/site-packages/grpc/aio/_metadata.py__init__zMetadata.__init__2   s-    $ $ 	'FHHHVX&	'    c                    |r | | S  |        S r    clsraw_metadatas     r   
from_tuplezMetadata.from_tuple7   s     %%ur   c                L    | |        S t        ||       r|S |r | | S  |        S r   )
isinstancer!   s     r   _createzMetadata._create?   s6     5LlC(%%ur   c                x    | j                   j                  |g        | j                   |   j                  |       y r   )r   
setdefaultappend)r   keyvalues      r   r   zMetadata.addN   s-    !!#r*s""5)r   c                d    t        t        t        | j                  j	                                     S )zReturn the total number of elements that there are in the metadata,
        including multiple values for the same key.
        )summaplenr   valuesr   s    r   __len__zMetadata.__len__R   s#     3sDNN113455r   c                t    	 | j                   |   d   S # t        t        f$ r}|}t        |      |d}~ww xY w)zmWhen calling <metadata>[<key>], the first element of all those
        mapped for <key> is returned.
        r   N)r   
ValueError
IndexErrorKeyError)r   r+   e	error_msgs       r   __getitem__zMetadata.__getitem__X   sD    	->>#&q))J' 	-'I9%1,	-s    727c                z    || vr|g| j                   |<   y| j                  |      }|g|dd | j                   |<   y)z_Calling metadata[<key>] = <value>
        Maps <value> to the first instance of <key>.
           N)r   get_all)r   r+   r,   current_valuess       r   __setitem__zMetadata.__setitem__b   sF     d?#('DNN3!\\#.N#(">>!"+=">DNN3r   c                v    | j                  |      }|st        t        |            |dd | j                  |<   y)z<``del metadata[<key>]`` deletes the first mapping for <key>.r<   N)r=   r7   reprr   )r   r+   r>   s      r   __delitem__zMetadata.__delitem__l   s7    c*49%%,QR0sr   c                    | j                   |= y)zDelete all mappings for <key>.Nr   r   r+   s     r   
delete_allzMetadata.delete_alls   s    NN3r   c              #  j   K   | j                   j                         D ]  \  }}|D ]  }||f 
  y wr   )r   items)r   r+   r1   r,   s       r   __iter__zMetadata.__iter__w   s?     >>//1 	#KC #El"#	#s   13c                ,    t        | j                        S r   )r	   r   r2   s    r   keyszMetadata.keys|   s    ''r   c                ,    t        | j                        S r   )r   r   r2   s    r   r1   zMetadata.values   s    $..))r   c                ,    t        | j                        S r   )r   r   r2   s    r   rH   zMetadata.items   s    ((r   Nc                0    	 | |   S # t         $ r |cY S w xY wr   )r7   )r   r+   defaults      r   getzMetadata.get   s%    	9 	N	s    c                :    | j                   j                  |g       S )zFor compatibility with other Metadata abstraction objects (like in Java),
        this would return all items under the desired <key>.
        )r   rP   rE   s     r   r=   zMetadata.get_all   s     ~~!!#r**r   c                "    || j                   |<   y r   rD   )r   r+   r1   s      r   set_allzMetadata.set_all   s    $sr   c                @    t        |t              sy|| j                  v S )NF)r&   MetadataKeyr   rE   s     r   __contains__zMetadata.__contains__   s    #{+dnn$$r   c                    t        || j                        r| j                  |j                  k(  S t        |t              rt        |       |k(  S t        S r   )r&   	__class__r   tupleNotImplementedr   others     r   __eq__zMetadata.__eq__   sB    eT^^,>>U__44eU#;%''r   c                    t        || j                        rt        t        |       t        |      z    S t        |t              rt        t        |       |z    S t        S r   )r&   rX   r   rY   rZ   r[   s     r   __add__zMetadata.__add__   sL    eT^^,eDkE%L8::eU#eDkE133r   c                d    t        |       }dj                  | j                  j                  |      S )Nz
{0}({1!r}))rY   formatrX   __name__)r   views     r   __repr__zMetadata.__repr__   s(    T{""4>>#:#:DAAr   )r   MetadatumTypereturnNone)r#   rY   )r#   z*Union[None, Self, Iterable[MetadatumType]]rf   r   )r+   rU   r,   MetadataValuerf   rg   )rf   int)r+   rU   rf   rh   )r+   rU   rf   rg   )rf   z+Iterator[Tuple[MetadataKey, MetadataValue]])rf   r	   )rf   r   )rf   r   r   )r+   rU   rO   Optional[MetadataValue]rf   rj   )r+   rU   rf   List[MetadataValue])r+   rU   r1   rk   rf   rg   )r+   objectrf   bool)r\   rl   rf   rm   )r\   r   rf   z
'Metadata')rf   str)rb   
__module____qualname____doc__r   classmethodr$   r'   r   r3   r:   r?   rB   rF   rI   rK   r1   rH   rP   r=   rS   rV   r]   r_   rd   r    r   r   r   r   %   s    
'
   @ 
 *6-?1 #
(*) DH)@	 +%%
Br   N)rq   
__future__r   collectionsr   collections.abcr   r   r   r   r	   r
   r   typingr   r   r   r   r   typing_extensionsr   rn   rU   bytesrh   re   MetadataTyper   r    r   r   <module>rz      sq    J " #   5 4 "c5j!k=01Z-!889FBz FBr   