
    Ng                         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dS )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j        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&dS )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                 h    t                      | _        |D ]\  }}|                     ||           d S N)r   	_metadataadd)selfr   md_keymd_values       N/var/www/html/ai-engine/env/lib/python3.11/site-packages/grpc/aio/_metadata.py__init__zMetadata.__init__$   sB    $ $ 	' 	'FHHHVX&&&&	' 	'    raw_metadatac                 $    |r | | S  |             S r    )clsr   s     r   
from_tuplezMetadata.from_tuple)   s"     	&3%%suur   keyvaluec                 |    | j                             |g            | j         |                             |           d S r   )r   
setdefaultappend)r   r   r   s      r   r   zMetadata.add/   s;    !!#r***s""5)))))r   c                 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__3   s*     3sDN113344555r   c                     	 | j         |         d         S # t          t          f$ r(}t          d                    |                    |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   sY    	7>#&q))J' 	7 	7 	77>>#..//Q6	7s    A#A		A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__B   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>.r2   N)r3   r-   reprr   )r   r   r4   s      r   __delitem__zMetadata.__delitem__L   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_allS   s    N3r   c              #   ^   K   | j                                         D ]\  }}|D ]}||fV  	d S r   )r   items)r   r   r'   r   s       r   __iter__zMetadata.__iter__W   sX      >//11 	# 	#KC # #El""""#	# 	#r   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                 8    	 | |         S # t           $ r |cY S w xY wr   )r-   )r   r   rG   s      r   getzMetadata.gete   s5    	9 	 	 	NNN	s   
 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   rI   r;   s     r   r3   zMetadata.get_allm   s     ~!!#r***r   r'   c                     || j         |<   d S 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    dn$$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   sN    eT^,, 	5>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__   s`    eT^,, 	;eDkkE%LL8::eU## 	4eDkkE133r   c                 `    t          |           }d                    | j        j        |          S )Nz
{0}({1!r}))rS   r.   rR   __name__)r   views     r   __repr__zMetadata.__repr__   s(    T{{""4>#:DA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 6 6 67{ 7} 7 7 7 7?{ ?= ?T ? ? ? ?1{ 1t 1 1 1 1 k  d        #(5m)C#DE # # # #
"cl " " " "$ $ $ $ $#s} # # # # :> )6	-	    +; +4+> + + + +%; %]0C % % % % %% % % % % %C D    S Z    B# B B B B 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 I # # # # # #       > > > > > > > > > > > > > > > >c5j!rB rB rB rB rBs~ rB rB rB rB rBr   