
    Ag                     |    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
 eZe
eef   Z G d dej                        Zy)zCImplementation of the metadata abstraction for gRPC Asyncio Python.    )OrderedDict)abc)AnyIteratorListOptionalTupleUnionc                      e Zd ZdZdeeef   ddfdZede	fd       Z
ded	eddfd
ZdefdZdedefdZded	eddfdZdeddfdZdeddfdZdeeeef      fdZdej*                  fdZdej.                  fdZdej2                  fdZ	 ddededee   fdZdedee   fdZdedee   ddfdZdede fdZ!de"de fdZ#de"dd fdZ$de%fdZ&y)Metadataa  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.
    argsreturnNc                 Z    t               | _        |D ]  \  }}| j                  ||        y N)r   	_metadataadd)selfr   md_keymd_values       G/var/www/openai/venv/lib/python3.12/site-packages/grpc/aio/_metadata.py__init__zMetadata.__init__$   s(    $ $FHHHVX& !%    raw_metadatac                     |r | | S  |        S r    )clsr   s     r   
from_tuplezMetadata.from_tuple)   s    %%ur   keyvaluec                 x    | j                   j                  |g        | j                   |   j                  |       y r   )r   
setdefaultappend)r   r   r   s      r   r   zMetadata.add/   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__3   s#     3sDNN113455r   c                     	 | j                   |   d   S # t        t        f$ r }t        dj	                  |            |d}~ww xY w)zmWhen calling <metadata>[<key>], the first element of all those
        mapped for <key> is returned.
        r   z{0!r}N)r   
ValueError
IndexErrorKeyErrorformat)r   r   es      r   __getitem__zMetadata.__getitem__9   sF    	7>>#&q))J' 	77>>#./Q6	7s    A>A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>.r2   N)r3   r-   reprr   )r   r   r4   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   r'   r   s       r   __iter__zMetadata.__iter__W   s5     >>//1KCEl"   2s   13c                 ,    t        j                  |       S r   )r   KeysViewr(   s    r   keyszMetadata.keys\   s    ||D!!r   c                 ,    t        j                  |       S r   )r   
ValuesViewr(   s    r   r'   zMetadata.values_   s    ~~d##r   c                 ,    t        j                  |       S r   )r   	ItemsViewr(   s    r   r>   zMetadata.itemsb   s    }}T""r   defaultc                 0    	 | |   S # t         $ r |cY S w xY wr   )r-   )r   r   rG   s      r   getzMetadata.gete   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   rI   r;   s     r   r3   zMetadata.get_allm   s     ~~!!#r**r   r'   c                 "    || j                   |<   y r   r:   )r   r   r'   s      r   set_allzMetadata.set_alls   s    $sr   c                     || j                   v S r   r:   r;   s     r   __contains__zMetadata.__contains__v   s    dnn$$r   otherc                     t        || j                        r| j                  |j                  k(  S t        |t              rt        |       |k(  S t        S r   )
isinstance	__class__r   tupleNotImplementedr   rO   s     r   __eq__zMetadata.__eq__y   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   )rQ   rR   r   rS   rT   rU   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}))rS   r.   rR   __name__)r   views     r   __repr__zMetadata.__repr__   s(    T{""4>>#:#:DAAr   r   )'rZ   
__module____qualname____doc__r	   MetadataKeyMetadataValuer   classmethodrS   r   r   intr)   r0   r5   r8   r<   r   r?   r   rA   rB   rD   r'   rF   r>   r   rI   r   r3   rL   boolrN   r   rV   rX   strr\   r   r   r   r   r      s   
'eK$>? 'D '
 e  
*{ *= *T *6 67{ 7} 7?{ ?= ?T ?1{ 1t 1 k  d  #(5m)C#DE #
"cll "$ $#s}} # :>)6	-	 +; +4+> +%; %]0C % %% % %C D S Z B# Br   r   N)r_   collectionsr   r   typingr   r   r   r   r	   r
   re   r`   bytesra   
Collectionr   r   r   r   <module>rj      s>    J #  > >c5j!rBs~~ rBr   