U
    "FZh                     @   sb   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 dejZdS )zCImplementation of the metadata abstraction for gRPC Asyncio Python.    )OrderedDict)abc)AnyIteratorListOptionalTupleUnionc                   @   sf  e Zd ZdZeeef ddddZee	dddZ
eedd	d
dZedddZeedddZeedd	ddZeddddZeddddZeeeef  dddZejdddZejdddZejdddZd1eeee d d!d"Zeee dd#d$Zeee dd%d&d'Zee dd(d)Z!e"e d*d+d,Z#e"d d*d-d.Z$e%dd/d0Z&dS )2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.
    N)argsreturnc                 G   s&   t  | _|D ]\}}| || qd S N)r   	_metadataadd)selfr   Zmd_keyZmd_value r   Y/home/aprabhat/apps/x.techxrdev.in/venv/lib/python3.8/site-packages/grpc/aio/_metadata.py__init__$   s    zMetadata.__init__)raw_metadatac                 C   s   |r| | S |  S r   r   )clsr   r   r   r   
from_tuple)   s    zMetadata.from_tuple)keyvaluer   c                 C   s"   | j |g  | j | | d S r   )r   
setdefaultappend)r   r   r   r   r   r   r   /   s    zMetadata.add)r   c                 C   s   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   r   r   r   __len__3   s    zMetadata.__len__)r   r   c              
   C   sL   z| j | d W S  ttfk
rF } ztd||W 5 d}~X Y nX dS )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   er   r   r   __getitem__9   s    zMetadata.__getitem__c                 C   s<   || kr|g| j |< n"| |}|f|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_valuesr   r   r   __setitem__B   s    
zMetadata.__setitem__c                 C   s0   |  |}|stt||dd | j|< dS )z<``del metadata[<key>]`` deletes the first mapping for <key>.r'   N)r(   r#   reprr   )r   r   r)   r   r   r   __delitem__L   s    
zMetadata.__delitem__c                 C   s   | j |= dS )zDelete all mappings for <key>.Nr   r   r   r   r   r   
delete_allS   s    zMetadata.delete_allc                 c   s,   | j  D ]\}}|D ]}||fV  qq
d S r   )r   items)r   r   r   r   r   r   r   __iter__W   s    zMetadata.__iter__c                 C   s
   t | S r   )r   KeysViewr   r   r   r   keys\   s    zMetadata.keysc                 C   s
   t | S r   )r   
ValuesViewr   r   r   r   r   _   s    zMetadata.valuesc                 C   s
   t | S r   )r   	ItemsViewr   r   r   r   r0   b   s    zMetadata.items)r   defaultr   c                 C   s(   z
| | W S  t k
r"   | Y S X d S r   )r#   )r   r   r6   r   r   r   gete   s    
zMetadata.getc                 C   s   | j |g S )zFor compatibility with other Metadata abstraction objects (like in Java),
        this would return all items under the desired <key>.
        )r   r7   r.   r   r   r   r(   m   s    zMetadata.get_all)r   r   r   c                 C   s   || j |< d S r   r-   )r   r   r   r   r   r   set_alls   s    zMetadata.set_allc                 C   s
   || j kS r   r-   r.   r   r   r   __contains__v   s    zMetadata.__contains__)otherr   c                 C   s2   t || jr| j|jkS t |tr.t| |kS tS r   )
isinstance	__class__r   tupleNotImplementedr   r:   r   r   r   __eq__y   s
    
zMetadata.__eq__c                 C   s>   t || jr tt| t|  S t |tr:tt| |  S tS r   )r;   r<   r
   r=   r>   r?   r   r   r   __add__   s
    
zMetadata.__add__c                 C   s   t | }d| jj|S )Nz
{0}({1!r}))r=   r$   r<   __name__)r   viewr   r   r   __repr__   s    zMetadata.__repr__)N)'rB   
__module____qualname____doc__r   MetadataKeyMetadataValuer   classmethodr=   r   r   intr    r&   r*   r,   r/   r   r1   r   r2   r3   r4   r   r5   r0   r   r7   r   r(   r8   boolr9   r   r@   rA   strrD   r   r   r   r   r
      s4   	
  r
   N)rG   collectionsr   r   typingr   r   r   r   r   r	   rM   rH   bytesrI   
Collectionr
   r   r   r   r   <module>   s    