
    (ph                     |    S r SSKJr  SSKJr  SSKJrJrJrJrJ	r	J
r
  \r\
\\4   r " S S\R                  5      rg)zCImplementation of the metadata abstraction for gRPC Asyncio Python.    )OrderedDict)abc)AnyIteratorListOptionalTupleUnionc                      \ rS rSrSrS\\\4   SS4S jr\	S\
4S j5       rS	\S
\SS4S jrS\4S jrS	\S\4S jrS	\S
\SS4S jrS	\SS4S jrS	\SS4S jrS\\\\4      4S jrS\R,                  4S jrS\R0                  4S jrS\R4                  4S jr S S	\S\S\\   4S jjrS	\S\\   4S jrS	\S\\   SS4S jr S	\S\!4S jr"S\#S\!4S jr$S\#SS 4S jr%S\&4S jr'Sr(g)!Metadata   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.
argsreturnNc                 Z    [        5       U l        U H  u  p#U R                  X#5        M     g N)r   	_metadataadd)selfr   md_keymd_values       E/var/www/html/venv/lib/python3.13/site-packages/grpc/aio/_metadata.py__init__Metadata.__init__$   s$    $ $FHHV& !%    raw_metadatac                 (    U(       a  U " U6 $ U " 5       $ r    )clsr   s     r   
from_tupleMetadata.from_tuple)   s    %%ur   keyvaluec                 x    U R                   R                  U/ 5        U R                   U   R                  U5        g r   )r   
setdefaultappend)r   r!   r"   s      r   r   Metadata.add/   s-    !!#r*s""5)r   c                 d    [        [        [        U R                  R	                  5       5      5      $ )zpReturn 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__Metadata.__len__3   s#     3sDNN113455r   c                      U R                   U   S   $ ! [        [        4 a   n[        SR	                  U5      5      UeSnAff = f)z]When 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__Metadata.__getitem__9   sF    	7>>#&q))J' 	77>>#./Q6	7s    A?Ac                 |    X;  a  U/U R                   U'   gU R                  U5      nU/USS QU R                   U'   g)zOCalling metadata[<key>] = <value>
Maps <value> to the first instance of <key>.
   N)r   get_all)r   r!   r"   current_valuess       r   __setitem__Metadata.__setitem__B   sD     ?#('DNN3!\\#.N#(">>!"+=">DNN3r   c                     U R                  U5      nU(       d  [        [        U5      5      eUSS U R                  U'   g)z<``del metadata[<key>]`` deletes the first mapping for <key>.r8   N)r9   r2   reprr   )r   r!   r:   s      r   __delitem__Metadata.__delitem__L   s7    c*49%%,QR0sr   c                     U R                   U	 g)zDelete all mappings for <key>.Nr   r   r!   s     r   
delete_allMetadata.delete_allS   s    NN3r   c              #   n   #    U R                   R                  5        H  u  pU H  nX4v   M
     M     g 7fr   )r   items)r   r!   r+   r"   s       r   __iter__Metadata.__iter__W   s0     >>//1KCl"   2s   35c                 .    [         R                  " U 5      $ r   )r   KeysViewr,   s    r   keysMetadata.keys\   s    ||D!!r   c                 .    [         R                  " U 5      $ r   )r   
ValuesViewr,   s    r   r+   Metadata.values_   s    ~~d##r   c                 .    [         R                  " U 5      $ r   )r   	ItemsViewr,   s    r   rG   Metadata.itemsb   s    }}T""r   defaultc                 0     X   $ ! [          a    Us $ f = fr   )r2   )r   r!   rT   s      r   getMetadata.gete   s#    	9 	N	s    c                 :    U R                   R                  U/ 5      $ )zFor compatibility with other Metadata abstraction objects (like in Java),
this would return all items under the desired <key>.
)r   rV   rC   s     r   r9   Metadata.get_allm   s     ~~!!#r**r   r+   c                      X R                   U'   g r   rB   )r   r!   r+   s      r   set_allMetadata.set_alls   s    $sr   c                     XR                   ;   $ r   rB   rC   s     r   __contains__Metadata.__contains__v   s    nn$$r   otherc                     [        XR                  5      (       a  U R                  UR                  :H  $ [        U[        5      (       a  [        U 5      U:H  $ [        $ r   )
isinstance	__class__r   tupleNotImplementedr   r`   s     r   __eq__Metadata.__eq__y   sF    e^^,,>>U__44eU##;%''r   c                     [        XR                  5      (       a  [        [        U 5      [        U5      -   6 $ [        U[        5      (       a  [        [        U 5      U-   6 $ [        $ r   )rb   rc   r   rd   re   rf   s     r   __add__Metadata.__add__   sP    e^^,,eDkE%L8::eU##eDkE133r   c                 d    [        U 5      nSR                  U R                  R                  U5      $ )Nz
{0}({1!r}))rd   r3   rc   __name__)r   views     r   __repr__Metadata.__repr__   s(    T{""4>>#:#:DAAr   rB   r   ))rm   
__module____qualname____firstlineno____doc__r	   MetadataKeyMetadataValuer   classmethodrd   r   r   intr-   r5   r;   r?   rD   r   rH   r   rK   rL   rO   r+   rR   rG   r   rV   r   r9   r[   boolr^   r   rg   rj   strro   __static_attributes__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)rt   collectionsr   r   typingr   r   r   r   r	   r
   rz   ru   bytesrv   
Collectionr   r   r   r   <module>r      s>    J #  > >c5j!rBs~~ rBr   