
    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dS )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d2dZed3d	            Zed4d            Zd5dZd6dZ	d7dZ
d5dZd8dZd8dZd9dZd:dZd;dZd<dZ	 d=d>d#Zd?d%Zd@d'ZdAd)ZdBd,ZdCd/ZdDd1Zd S )Er   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MetadatumTypereturnNonec                h    t                      | _        |D ]\  }}|                     ||           d S N)r   	_metadataadd)selfr   md_keymd_values       \/lsinfo/ai/hellotax_ai/base_platform/venv/lib/python3.11/site-packages/grpc/aio/_metadata.py__init__zMetadata.__init__0   sB    $ $ 	' 	'FHHHVX&&&&	' 	'    raw_metadatatuplec                $    |r | | S  |             S r    clsr"   s     r   
from_tuplezMetadata.from_tuple5   s$      	&3%%suur!   *Union[None, Self, Iterable[MetadatumType]]r   c                h    |t                      S t          ||           r|S |r | | S  |             S r   )r   
isinstancer&   s     r   _createzMetadata._create=   sL     ::lC(( 	  	&3%%suur!   keyMetadataKeyvalueMetadataValuec                |    | j                             |g            | j         |                             |           d S r   )r   
setdefaultappend)r   r-   r/   s      r   r   zMetadata.addL   s;    !!#r***s""5)))))r!   intc                t    t          t          t          | 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*     3sDN113344555r!   c                    	 | 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   sT    	->#&q))J' 	- 	- 	-
I9%%1,	-s    >9>c                |    || vr|g| j         |<   dS |                     |          }|g|dd         | j         |<   dS )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__`   sU     d??#('DN3!\\#..N#(">>!""+=">DN3r!   c                    |                      |          }|st          t          |                    |dd         | j        |<   dS )z<``del metadata[<key>]`` deletes the first mapping for <key>.rD   N)rE   r?   reprr   )r   r-   rF   s      r   __delitem__zMetadata.__delitem__j   sJ    c** 	&499%%%,QRR0sr!   c                    | j         |= dS )zDelete all mappings for <key>.Nr   r   r-   s     r   
delete_allzMetadata.delete_allq   s    N3r!   +Iterator[Tuple[MetadataKey, MetadataValue]]c              #  ^   K   | j                                         D ]\  }}|D ]}||fV  	d S r   )r   items)r   r-   r9   r/   s       r   __iter__zMetadata.__iter__u   sX      >//11 	# 	#KC # #El""""#	# 	#r!   r	   c                *    t          | j                  S r   )r	   r   r:   s    r   keyszMetadata.keysz   s    '''r!   r   c                *    t          | j                  S r   )r   r   r:   s    r   r9   zMetadata.values}   s    $.)))r!   r   c                *    t          | j                  S r   )r   r   r:   s    r   rQ   zMetadata.items   s    (((r!   NdefaultOptional[MetadataValue]c                8    	 | |         S # t           $ r |cY S w xY wr   )r?   )r   r-   rW   s      r   getzMetadata.get   s5    	9 	 	 	NNN	s   
 List[MetadataValue]c                8    | j                             |g           S )zFor compatibility with other Metadata abstraction objects (like in Java),
        this would return all items under the desired <key>.
        )r   rZ   rM   s     r   rE   zMetadata.get_all   s     ~!!#r***r!   r9   c                    || j         |<   d S r   rL   )r   r-   r9   s      r   set_allzMetadata.set_all   s    $sr!   boolc                    || j         v S r   rL   rM   s     r   __contains__zMetadata.__contains__   s    dn$$r!   otherobjectc                    t          || j                  r| j        |j        k    S t          |t                    rt          |           |k    S t          S r   )r+   	__class__r   r#   NotImplementedr   rb   s     r   __eq__zMetadata.__eq__   sN    eT^,, 	5>U_44eU## 	(;;%''r!   r   
'Metadata'c                    t          || j                  r&t          t          |           t          |          z    S t          |t                    rt          t          |           |z    S t          S r   )r+   re   r   r#   rf   rg   s     r   __add__zMetadata.__add__   s`    eT^,, 	;eDkkE%LL8::eU## 	4eDkkE133r!   strc                `    t          |           }d                    | j        j        |          S )Nz
{0}({1!r}))r#   formatre   __name__)r   views     r   __repr__zMetadata.__repr__   s(    T{{""4>#:DAAAr!   )r   r   r   r   )r"   r#   )r"   r)   r   r   )r-   r.   r/   r0   r   r   )r   r4   )r-   r.   r   r0   )r-   r.   r   r   )r   rO   )r   r	   )r   r   )r   r   r   )r-   r.   rW   rX   r   rX   )r-   r.   r   r[   )r-   r.   r9   r[   r   r   )r-   r.   r   r_   )rb   rc   r   r_   )rb   r   r   ri   )r   rl   )ro   
__module____qualname____doc__r    classmethodr(   r,   r   r;   rB   rG   rJ   rN   rR   rT   r9   rQ   rZ   rE   r^   ra   rh   rk   rq   r%   r!   r   r   r   #   s       
 
' ' ' '
    [    [* * * *6 6 6 6- - - -? ? ? ?1 1 1 1       # # # #
( ( ( (* * * *) ) ) ) DH    + + + +% % % %% % % %      B B B B B Br!   N)rt   
__future__r   collectionsr   collections.abcr   r   r   r   r	   r
   r   typingr   r   r   r   r   typing_extensionsr   rl   r.   bytesr0   r   MetadataTyper   r%   r!   r   <module>r}      sj   J I " " " " " " # # # # # # & & & & & & % % % % % % $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ & & & & & & 4 4 4 4 4 4 4 4 4 4 4 4 4 4 " " " " " "c5j!k=01Z-!889DB DB DB DB DBz DB DB DB DB DBr!   