
    \j                        d Z ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm	Z	 ddlm
Z
 dd	lmZ dd
l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       </root/env/lib/python3.12/site-packages/grpc/aio/_metadata.py__init__zMetadata.__init__0   s-    $ $ 	'FHHHVX&	'    c                    |r | | S  |        S r    clsraw_metadatas     r   
from_tuplezMetadata.from_tuple5   s     %%ur   c                R    |
t               S t        ||       r|S |r | | S  |        S r   )r   
isinstancer!   s     r   _createzMetadata._create=   s7     :lC(%%ur   c                x    | j                   j                  |g        | j                   |   j                  |       y r   )r   
setdefaultappend)r   keyvalues      r   r   zMetadata.addL   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__P   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__V   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__`   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__j   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_allq   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__u   s?     >>//1 	#KC #El"#	#s   13c                ,    t        | j                        S r   )r	   r   r2   s    r   keyszMetadata.keysz   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                    || j                   v S r   rD   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&   rW   r   rX   rY   rZ   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}))rX   formatrW   __name__)r   views     r   __repr__zMetadata.__repr__   s(    T{""4>>#:#:DAAr   )r   MetadatumTypereturnNone)r#   rX   )r#   z*Union[None, Self, Iterable[MetadatumType]]re   r   )r+   MetadataKeyr,   MetadataValuere   rf   )re   int)r+   rg   re   rh   )r+   rg   re   rf   )re   z+Iterator[Tuple[MetadataKey, MetadataValue]])re   r	   )re   r   )re   r   r   )r+   rg   rO   Optional[MetadataValue]re   rj   )r+   rg   re   List[MetadataValue])r+   rg   r1   rk   re   rf   )r+   rg   re   bool)r[   objectre   rl   )r[   r   re   z
'Metadata')re   str)ra   
__module____qualname____doc__r   classmethodr$   r'   r   r3   r:   r?   rB   rF   rI   rK   r1   rH   rP   r=   rS   rU   r\   r^   rc   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   rg   bytesrh   rd   MetadataTyper   r    r   r   <module>rz      su    J " # & % $ $ $ $ & 4 4 "c5j!k=01Z-!889DBz DBr   