o
    f>hlq                     @   s  d dl Z d dlZd dlZd dlmZ d dlmZmZmZmZm	Z	m
Z
mZ d dlmZmZmZmZmZmZmZmZmZ ddlmZmZmZmZ ejdkrRd dlmZ nd dlmZ G d	d
 d
eZedZ edZ!e "ddZ#e#j$Z$edd gZ%G dd dee! Z&G dd dee  Z'G dd de'e  eee f Z(G dd de'e  ee  Z)G dd de'e  e	e Z*G dd dZ+G dd dZ,G dd de+ee  Z-G d d! d!e,e-e  Z.G d"d# d#e+ee  Z/G d$d% d%e,e/e  Z0d&ee-e1 e/e1 f d'e2fd(d)Z3dS )*    N)array)Callable	ItemsViewIterableIteratorKeysViewMapping
ValuesView)	TYPE_CHECKINGAnyGenericNoReturnOptionalTypeVarUnioncastoverload   )MDArgMultiMappingMutableMultiMappingSupportsKeys)      )Selfc                   @   s&   e Zd ZU dZdZdZee ed< dS )istrzCase insensitive str.TN__istr_identity__)	__name__
__module____qualname____doc____is_istr__r   r   str__annotations__ r$   r$   J/var/www/html/venv/lib/python3.10/site-packages/multidict/_multidict_py.pyr   "   s   
 r   _V_T	_SENTINELsentinelQc                   @   sP   e Zd ZdZdedee fddZdefddZ	defd	d
Z
defddZdS )_Iter_size_itersizeiteratorc                 C   s   || _ || _d S Nr,   )selfr/   r0   r$   r$   r%   __init__5   s   
z_Iter.__init__returnc                 C   s   | S r1   r$   r2   r$   r$   r%   __iter__9      z_Iter.__iter__c                 C   
   t | jS r1   )nextr.   r5   r$   r$   r%   __next__<      
z_Iter.__next__c                 C   s   | j S r1   )r-   r5   r$   r$   r%   __length_hint__?   s   z_Iter.__length_hint__N)r   r   r   	__slots__intr   r'   r3   r   r6   r:   r<   r$   r$   r$   r%   r+   2   s    r+   c                   @   s(   e Zd Z		d	ddZdefddZdS )
	_ViewBasemdMultiDict[_V]c                 C   s
   || _ d S r1   _md)r2   r@   r$   r$   r%   r3   D   s   
z_ViewBase.__init__r4   c                 C   r8   r1   lenrC   r5   r$   r$   r%   __len__J   r;   z_ViewBase.__len__N)r@   rA   )r   r   r   r3   r>   rF   r$   r$   r$   r%   r?   C   s
    
r?   c                   @   s  e Zd ZdedefddZdeeee	f  fddZ
dedeeee	f  fdd	Ze defd
dZdeeee	f ef deeeee	f  fddZdee deeee	f  fddZdee deeee	f  fddZdee dee fddZdee deeeee	f ef  fddZdee deeeee	f ef  fddZdee deeeee	f ef  fddZdee dee fddZdee deeeee	f ef  fdd ZeZ deeee	f  defd!d"Z!d#S )$
_ItemsViewitemr4   c                 C   sz   t |ttfrt|dkrdS |\}}z| j|}W n
 ty%   Y dS w | jjD ]\}}}||kr:||kr: dS q*dS )N   FT)
isinstancetuplelistrE   rC   	_identity	TypeError_items)r2   rH   keyvalueidentikvr$   r$   r%   __contains__O   s   z_ItemsView.__contains__c                 C      t t| | | jjS r1   r+   rE   r.   rC   _versionr5   r$   r$   r%   r6   \      z_ItemsView.__iter__versionc                 c   s@    | j jD ]\}}}|| j jkrtd| j ||fV  qd S Nz#Dictionary changed during iterationrC   rO   rY   RuntimeError_keyr2   r[   rS   rT   rU   r$   r$   r%   r.   _   s   z_ItemsView._iterc                 C   sN   g }| j jD ]\}}}|d| d| qd|}d| jj d| dS )N'': , <()>rC   rO   appendjoin	__class__r   r2   lstrS   rT   rU   bodyr$   r$   r%   __repr__e   s
   
z_ItemsView.__repr__argc                 C   sT   t |tsd S t|dkrd S z| j|d |d |d fW S  ty)   Y d S w )NrI   r   r   )rJ   rK   rE   rC   rM   rN   r2   ro   r$   r$   r%   _parse_itemm   s   
 z_ItemsView._parse_itemitc                 C   s>   t  }|D ]}| |}|d u rq||d |d f q|S )Nr   rI   )setrq   add)r2   rr   tmpro   rH   r$   r$   r%   _tmp_sety   s   
z_ItemsView._tmp_setotherc                 C   s   t  }zt|}W n ty   t Y S w |D ]*}| |}|d u r#q|\}}}| jjD ]\}	}
}|	|kr@||kr@||
|f q,q|S r1   rs   iterrN   NotImplementedrq   rC   rO   rt   r2   rw   retrr   ro   rH   identityrP   rQ   rS   rT   rU   r$   r$   r%   __and__   s"   

z_ItemsView.__and__c                 C   s   t  }zt|}W n ty   t Y S w |D ]*}| |}|d u r#q|\}}}| jjD ]\}	}
}|	|kr@||kr@||  nq,q|S r1   rx   r{   r$   r$   r%   __rand__   s"   


z_ItemsView.__rand__c                 C   s   t | }zt|}W n ty   t Y S w |D ]/}| |}|d u r)|| q|\}}}| jjD ]\}	}
}|	|krA||krA nq2|| q|S r1   rs   ry   rN   rz   rq   rt   rC   rO   r{   r$   r$   r%   __or__   s&   



z_ItemsView.__or__c                 C   s`   zt |}W n ty   t Y S w | |}| jjD ]\}}}||f|vr-|||f q|S r1   )rs   rN   rz   rv   rC   rO   rt   )r2   rw   r|   ru   rS   rT   rU   r$   r$   r%   __ror__   s   
z_ItemsView.__ror__c                 C   sf   t  }zt|}W n ty   t Y S w | |}| jjD ]\}}}||f|vr0|||f q|S r1   )rs   ry   rN   rz   rv   rC   rO   rt   )r2   rw   r|   rr   ru   rS   rT   rU   r$   r$   r%   __sub__   s   
z_ItemsView.__sub__c                 C   s   t  }zt|}W n ty   t Y S w |D ]/}| |}|d u r(|| q|\}}}| jjD ]\}	}
}|	|kr@||kr@ nq1|| q|S r1   r   r{   r$   r$   r%   __rsub__   s&   



z_ItemsView.__rsub__c                 C   <   zt |}W n ty   t Y S w | | }|||  O }|S r1   rs   rN   rz   r2   rw   rgtr|   r$   r$   r%   __xor__      z_ItemsView.__xor__c           
      C   sX   |D ]'}|  |}|d u rq|\}}}| jjD ]\}}}	||kr(|	|kr(  dS qqdS NFT)rq   rC   rO   )
r2   rw   ro   rH   r}   rP   rQ   rS   rT   rU   r$   r$   r%   
isdisjoint   s   

z_ItemsView.isdisjointN)"r   r   r   objectboolrV   r+   rK   r"   r&   r6   r>   r   r.   reprlibrecursive_reprrn   r   r'   r   rq   r   rs   rv   r   r~   r   r   r   r   r   r   __rxor__r   r$   r$   r$   r%   rG   N   s*    
""
****	"rG   c                   @   s\   e Zd ZdedefddZdee fddZde	de
e fdd	Ze defd
dZdS )_ValuesViewrQ   r4   c                 C   s&   | j jD ]\}}}||kr dS qdS )NTF)rC   rO   )r2   rQ   rS   rT   rU   r$   r$   r%   rV      s
   z_ValuesView.__contains__c                 C   rW   r1   rX   r5   r$   r$   r%   r6     rZ   z_ValuesView.__iter__r[   c                 c   s4    | j jD ]\}}}|| j jkrtd|V  qd S r\   )rC   rO   rY   r^   r`   r$   r$   r%   r.     s   z_ValuesView._iterc                 C   sF   g }| j jD ]\}}}|t| qd|}d| jj d| dS )Nrc   rd   re   rf   )rC   rO   rh   reprri   rj   r   rk   r$   r$   r%   rn     s
   
z_ValuesView.__repr__N)r   r   r   r   r   rV   r+   r&   r6   r>   r   r.   r   r   r"   rn   r$   r$   r$   r%   r      s    r   c                   @   s<  e Zd ZdedefddZdee fddZde	de
e fdd	Zdefd
dZdee dee fddZdee dee fddZdee deeeef  fddZdee deeeef  fddZdee dee fddZdee dee fddZdee deeeef  fddZeZdee defddZdS )	_KeysViewrP   r4   c                 C   s@   t |tsdS | j|}| jjD ]\}}}||kr dS qdS r   rJ   r"   rC   rM   rO   r2   rP   r}   rS   rT   rU   r$   r$   r%   rV     s   
z_KeysView.__contains__c                 C   rW   r1   rX   r5   r$   r$   r%   r6      rZ   z_KeysView.__iter__r[   c                 c   s<    | j jD ]\}}}|| j jkrtd| j |V  qd S r\   r]   r`   r$   r$   r%   r.   #  s   z_KeysView._iterc                 C   sJ   g }| j jD ]\}}}|d| d qd|}d| jj d| dS )Nra   rc   rd   re   rf   rg   rk   r$   r$   r%   rn   )  s
   
z_KeysView.__repr__rw   c           	      C   sv   t  }zt|}W n ty   t Y S w |D ]!}t|tsq| j|}| jjD ]\}}}||kr7|	| q)q|S r1   )
rs   ry   rN   rz   rJ   r"   rC   rM   rO   rt   	r2   rw   r|   rr   rP   r}   rS   rT   rU   r$   r$   r%   r~   0  s    

z_KeysView.__and__c           	      C   s   t  }zt|}W n ty   t Y S w |D ]!}t|tsq| j|}| jjD ]\}}}||kr7|	| q)qt
t t |S r1   )rs   ry   rN   rz   rJ   r"   rC   rM   rO   rt   r   r'   r   r$   r$   r%   r   ?  s    

z_KeysView.__rand__c           	      C   s   t | }zt|}W n ty   t Y S w |D ](}t|ts%|| q| j|}| jj	D ]\}}}||kr: nq/|| q|S r1   )
rs   ry   rN   rz   rJ   r"   rt   rC   rM   rO   r   r$   r$   r%   r   N  s$   


z_KeysView.__or__c           	      C   s   zt |}W n ty   t Y S w t  }|D ]}t|tsq| j|}|| q| jjD ]\}}}||vr=|| q/|S r1   )	rs   rN   rz   rJ   r"   rC   rM   rt   rO   )	r2   rw   r|   ru   rP   r}   rS   rT   rU   r$   r$   r%   r   `  s    

z_KeysView.__ror__c           	      C   s|   t | }zt|}W n ty   t Y S w |D ]#}t|ts q| j|}| jjD ]\}}}||kr:|	|  nq*q|S r1   )
rs   ry   rN   rz   rJ   r"   rC   rM   rO   discardr   r$   r$   r%   r   r  s"   

z_KeysView.__sub__c                 C   st   zt |}W n ty   t Y S w |D ]#}t|tsq| j|}| jjD ]\}}}||kr6||  nq&q|S r1   )	rs   rN   rz   rJ   r"   rC   rM   rO   r   )r2   rw   r|   rP   r}   rS   rT   rU   r$   r$   r%   r     s    

z_KeysView.__rsub__c                 C   r   r1   r   r   r$   r$   r%   r     r   z_KeysView.__xor__c                 C   sJ   |D ] }t |ts
q| j|}| jjD ]\}}}||kr!  dS qqdS r   r   )r2   rw   rP   r}   rS   rT   rU   r$   r$   r%   r     s   
z_KeysView.isdisjointN)r   r   r   r   r   rV   r+   r"   r6   r>   r   r.   rn   r   rs   r~   r'   r   r   r   r   r   r   r   r   r   r$   r$   r$   r%   r     s    	"""	r   c                   @   >   e Zd ZU dZeed< dedefddZdedefddZd	S )
_CSMixinF_cirP   r4   c                 C   s   |S r1   r$   r2   rP   r$   r$   r%   r_     r7   z_CSMixin._keyc                 C   s   t |tr|S tdNz8MultiDict keys should be either str or subclasses of str)rJ   r"   rN   r   r$   r$   r%   rM     s   
z_CSMixin._identityN	r   r   r   r   r   r#   r"   r_   rM   r$   r$   r$   r%   r     s   
 r   c                   @   r   )
_CIMixinTr   rP   r4   c                 C   s   t |tu r|S t|S r1   )typer   r   r$   r$   r%   r_     s   z_CIMixin._keyc                 C   sD   t |tr|j}|d u r| }||_|S t |tr| S tdr   )rJ   r   r   titler"   rN   )r2   rP   r|   r$   r$   r%   rM     s   

z_CIMixin._identityNr   r$   r$   r$   r%   r     s   
 r   c                   @   s  e Zd ZdZdZdee defddZedede	e fd	d
Z
edededee	e ef fdd
Z
efdedeeef dee	e ef fdd
Z
ededefddZedededeeef fddZefdedeeef deeef fddZdedefddZededeedf fddZedededeeef fddZdZdedeedf deeedf fddZdee fddZdefddZdee fddZdeeef fddZdee fd d!Zd"edefd#d$Zdedefd%d&Ze ! defd'd(Z"e#j$j%d)krdefd*d+Z&de'e(e) e'e	e'eef   f fd,d-Z*ded.eddfd/d0Z+de)fd1d2Z,e,Z-dZdee deddfd3d4Z.dee de/eef d5ed6e0e	e'eeef  gdf ddf
d7d8Z1d9e2e'eeef  ddfd:d;Z3d[d<d=Z4ded.eddfd>d?Z5deddfd@dAZ6e	dZdBdCdedddeedf fdDdEZ7edededefdFdEZ7dZdedeedf deedf fdGdEZ7ededefdHdIZ8edededeeef fdJdIZ8efdedeeef deeef fdKdIZ8e9se8Z:edede	e fdLdMZ;edededee	e ef fdNdMZ;efdedeeef dee	e ef fdOdMZ;de'eef fdPdQZ<dZdee deddfdRdSZ=d9e	e'eeef  ddfdTdUZ>ded.eddfdVdWZ?d[dXdYZ@dS )\	MultiDictz/Dictionary with the support for duplicate keys.Nro   kwargsc                K   s>   g | _ t}|d  d7  < |d | _| ||| jj| j d S Nr   r   )rO   rY   _extendrj   r   _extend_items)r2   ro   r   rU   r$   r$   r%   r3     s
   
zMultiDict.__init__rP   r4   c                 C      d S r1   r$   r   r$   r$   r%   getall  r7   zMultiDict.getalldefaultc                 C   r   r1   r$   r2   rP   r   r$   r$   r%   r     r7   c                    sB   |  |  fdd| jD }|r|S |s|tur|S td| )-Return a list of all values matching the key.c                    s   g | ]\}}}| kr|qS r$   r$   .0rS   rT   rU   r}   r$   r%   
<listcomp>  s    z$MultiDict.getall.<locals>.<listcomp>Key not found: %rrM   rO   r)   KeyError)r2   rP   r   resr$   r   r%   r     s   
c                 C   r   r1   r$   r   r$   r$   r%   getone  r7   zMultiDict.getonec                 C   r   r1   r$   r   r$   r$   r%   r     r7   c                 C   sD   |  |}| jD ]\}}}||kr|  S q|tur|S td| )wGet first value matching the key.

        Raises KeyError if the key is not found and no default is provided.
        r   r   r2   rP   r   r}   rS   rT   rU   r$   r$   r%   r     s   
c                 C   
   |  |S r1   r   r   r$   r$   r%   __getitem__  r;   zMultiDict.__getitem__c                C   r   r1   r$   r   r$   r$   r%   get  r7   zMultiDict.getc                C   r   r1   r$   r   r$   r$   r%   r     r7   c                 C   s   |  ||S zGet first value matching the key.

        If the key is not found, returns the default (or None if no default is provided)
        r   r   r$   r$   r%   r      s   c                 C      t |  S r1   )ry   keysr5   r$   r$   r%   r6     s   zMultiDict.__iter__c                 C   r8   r1   )rE   rO   r5   r$   r$   r%   rF   
  r;   zMultiDict.__len__c                 C      t | S z+Return a new view of the dictionary's keys.)r   r5   r$   r$   r%   r        zMultiDict.keysc                 C   r   zAReturn a new view of the dictionary's items *(key, value) pairs).)rG   r5   r$   r$   r%   items  r   zMultiDict.itemsc                 C   r   z-Return a new view of the dictionary's values.)r   r5   r$   r$   r%   values  r   zMultiDict.valuesrw   c                 C   s   t |tstS t |tr| |jkS t |trC| j}|j}t|t|kr&dS t||D ]\\}}}\}}}||ks=||kr@ dS q+dS t| jt|krNdS | 	 D ]\}	}
|
|	t}|
|krc dS qRdS r   )rJ   r   rz   MultiDictProxyrC   r   rO   rE   zipr   r   r)   )r2   rw   lftrhti1k2v1i2v2rT   rU   nvr$   r$   r%   __eq__  s,   



zMultiDict.__eq__c                 C   s<   t |tsdS | |}| jD ]\}}}||kr dS qdS r   )rJ   r"   rM   rO   r   r$   r$   r%   rV   /  s   

zMultiDict.__contains__c                 C   s,   d dd | jD }d| jj d| dS )Nrc   c                 s   s&    | ]\}}}d | d|V  qdS ra   rb   Nr$   r   r$   r$   r%   	<genexpr>:  s   $ z%MultiDict.__repr__.<locals>.<genexpr>rd   re   rf   )ri   rO   rj   r   r2   rm   r$   r$   r%   rn   8  s   zMultiDict.__repr__pypyc                 C   s   t | t| j S r1   )r   
__sizeof__sys	getsizeofrO   r5   r$   r$   r%   r   ?  s   zMultiDict.__sizeof__c                 C   s   | j t|  ffS r1   )rj   rL   r   r5   r$   r$   r%   
__reduce__B     zMultiDict.__reduce__rQ   c                 C   s(   |  |}| j|||f |   d S r1   )rM   rO   rh   _incr_version)r2   rP   rQ   r}   r$   r$   r%   rt   E  s   
zMultiDict.addc                 C   s   | j }||  S zReturn a copy of itself.)rj   r   )r2   clsr$   r$   r%   copyJ  s   zMultiDict.copyc                K      |  ||d| j dS )zhExtend current MultiDict with more values.

        This method must be used instead of update.
        extendN)r   r   r2   ro   r   r$   r$   r%   r   Q  s   zMultiDict.extendnamemethodc           
         sT   rt  tr
 j t  tr@j jur fdd jD }n	 j}|r)| }|r?| D ]\}}|	|||f q/nUt
 drWttt    fdd  D  |rft   t|  g }t D ](\}}	t|	dkstd| dt|	 d|	|	d	 |	d	 |	d
 f ql|| d S |fdd| D  d S )Nc                    s"   g | ]\}}}  |||fqS r$   rM   )r   _rT   rU   r5   r$   r%   r   d  s   " z%MultiDict._extend.<locals>.<listcomp>r   c                    s   g | ]}| | fqS r$   r$   )r   rT   )ro   r$   r%   r   o  s    rI   z#multidict update sequence element #zhas length z; 2 is requiredr   r   c                    s    g | ]\}}  |||fqS r$   r   )r   rP   rQ   r5   r$   r%   r   ~  s     )rJ   r   rC   r   r   rO   r   r   rh   rM   hasattrr   r   r&   r   rL   r   	enumeraterE   
ValueError)
r2   ro   r   r   r   r   rP   rQ   posrH   r$   )ro   r2   r%   r   X  s<   


$zMultiDict._extendr   c                 C   s.   |D ]\}}}| j |||f q|   d S r1   )rO   rh   r   )r2   r   r}   rP   rQ   r$   r$   r%   r     s   zMultiDict._extend_itemsc                 C   s   | j   |   dS )z Remove all items from MultiDict.N)rO   clearr   r5   r$   r$   r%   r     s   
zMultiDict.clearc                 C   s   |  || d S r1   )_replace)r2   rP   rQ   r$   r$   r%   __setitem__  s   zMultiDict.__setitem__c                 C   s`   |  |}| j}d}tt|d ddD ]}|| d |kr#||= d}q|s*t||   d S )NFr   r   T)rM   rO   rangerE   r   r   )r2   rP   r}   r   foundrS   r$   r$   r%   __delitem__  s   
zMultiDict.__delitem__r2   zMultiDict[Union[_T, None]]c                 C   r   r1   r$   r   r$   r$   r%   
setdefault  s   zMultiDict.setdefaultc                 C   r   r1   r$   r   r$   r$   r%   r     r7   c                 C   s<   |  |}| jD ]\}}}||kr|  S q| || |S )zAReturn value for key, set value to default if key is not present.)rM   rO   rt   r   r$   r$   r%   r     s   
c                 C   r   r1   r$   r   r$   r$   r%   popone  r7   zMultiDict.poponec                 C   r   r1   r$   r   r$   r$   r%   r     r7   c                 C   sj   |  |}tt| jD ]}| j| d |kr*| j| d }| j|= |   |  S q|tu r3t||S )zRemove specified key and return the corresponding value.

        If key is not found, d is returned if given, otherwise
        KeyError is raised.

        r   rI   )rM   r   rE   rO   r   r)   r   )r2   rP   r   r}   rS   rQ   r$   r$   r%   r     s   
	c                 C   r   r1   r$   r   r$   r$   r%   popall  r7   zMultiDict.popallc                 C   r   r1   r$   r   r$   r$   r%   r     r7   c                 C   s   d}|  |}g }tt| jd ddD ]}| j| }|d |kr2||d  | j|= |   d}q|s?|tu r=t||S |  |S )zRemove all occurrences of key and return the list of corresponding
        values.

        If key is not found, default is returned if given, otherwise
        KeyError is raised.

        Fr   r   r   rI   T)	rM   r   rE   rO   rh   r   r)   r   reverse)r2   rP   r   r   r}   r|   rS   rH   r$   r$   r%   r     s"   


c                 C   s4   | j r| j  \}}}|   | ||fS td)z1Remove and return an arbitrary (key, value) pair.zempty multidict)rO   popr   r_   r   )r2   rS   rT   rU   r$   r$   r%   popitem  s
   zMultiDict.popitemc                K   r   )z>Update the dictionary from *other*, overwriting existing keys.updateN)r   _update_itemsr   r$   r$   r%   r     s   zMultiDict.updatec           
      C   s  |sd S i }|D ]A\}}}| |d}t|t| jD ]}| j| }|d |kr8|d ||< |||f| j|<  nq| j|||f t| j||< qd}|t| jk r~| j| }|d }| |}	|	d u rj|d7 }qL||	krs| j|= n|d7 }|t| jk sS|   d S r   )r   r   rE   rO   rh   r   )
r2   r   	used_keysr}   rP   rQ   startrS   rH   r   r$   r$   r%   r     s8   



zMultiDict._update_itemsc                 C   s   |  |}| j}tt|D ]}|| }|d |kr)|||f||< |}|    nq| j|||f |   d S |d }|t|k r]|| }|d |krQ||= n|d7 }|t|k sCd S d S r   )rM   rO   r   rE   r   rh   )r2   rP   rQ   r}   r   rS   rH   r   r$   r$   r%   r     s(   
zMultiDict._replacec                 C   s"   t }|d  d7  < |d | _ d S r   )rY   )r2   rU   r$   r$   r%   r   1  s   zMultiDict._incr_versionr1   )r4   N)Ar   r   r   r    r   r&   r3   r   r"   rL   r   r'   r   r)   r(   r   r   r   r   r6   r>   rF   r   r   r   r   r   r   r   r   r   rV   r   r   rn   r   implementationr   r   rK   r   r   r   rt   r   __copy__r   r   r   r   r   r   r   r   r   r   r   r
   r   r   r   r   r   r   r   r$   r$   r$   r%   r     s    $

 


 *	*

 (

(	 


$

	  r   c                   @   s   e Zd ZdZdS )CIMultiDictz@Dictionary with the support for duplicate case-insensitive keys.N)r   r   r   r    r$   r$   r$   r%   r   7  s    r   c                
   @   s8  e Zd ZU dZee ed< deee df fddZde	fdd	Z
ed
edee fddZed
ededeee ef fddZefd
edeeef deee ef fddZed
edefddZed
ededeeef fddZefd
edeeef deeef fddZd
edefddZed
edeedf fddZeded
edeeef fddZd.d
edeedf deeedf fddZdee fddZdefddZdee fdd Zdeeef fd!d"Zdee fd#d$Zd%ede fd&d'Z!d
ede fd(d)Z"e#$ defd*d+Z%dee fd,d-Z&dS )/r   z'Read-only proxy for MultiDict instance.rC   ro   zMultiDictProxy[_V]c                 C   s@   t |ttfstdt| t |tr|j| _d S || _d S )Nz8ctor requires MultiDict or MultiDictProxy instance, not )rJ   r   r   rN   r   rC   rp   r$   r$   r%   r3   @  s   

zMultiDictProxy.__init__r4   c                 C   s   t d| jj d)Nzcan't pickle z objects)rN   rj   r   r5   r$   r$   r%   r   K  r   zMultiDictProxy.__reduce__rP   c                 C   r   r1   r$   r   r$   r$   r%   r   N  r7   zMultiDictProxy.getallr   c                 C   r   r1   r$   r   r$   r$   r%   r   P  r7   c                 C   "   |t ur| j||S | j|S )r   )r)   rC   r   r   r$   r$   r%   r   R  s   c                 C   r   r1   r$   r   r$   r$   r%   r   [  r7   zMultiDictProxy.getonec                 C   r   r1   r$   r   r$   r$   r%   r   ]  r7   c                 C   r   )r   )r)   rC   r   r   r$   r$   r%   r   _  s   c                 C   r   r1   r   r   r$   r$   r%   r   m  r;   zMultiDictProxy.__getitem__Nc                C   r   r1   r$   r   r$   r$   r%   r   p  r7   zMultiDictProxy.getc                C   r   r1   r$   r   r$   r$   r%   r   r  r7   c                 C   s   | j ||S r   )rC   r   r   r$   r$   r%   r   t  s   c                 C   s   t | j S r1   )ry   rC   r   r5   r$   r$   r%   r6   {  s   zMultiDictProxy.__iter__c                 C   r8   r1   rD   r5   r$   r$   r%   rF   ~  r;   zMultiDictProxy.__len__c                 C   
   | j  S r   )rC   r   r5   r$   r$   r%   r        
zMultiDictProxy.keysc                 C   r   r   )rC   r   r5   r$   r$   r%   r     r   zMultiDictProxy.itemsc                 C   r   r   )rC   r   r5   r$   r$   r%   r     r   zMultiDictProxy.valuesrw   c                 C   s
   | j |kS r1   rB   )r2   rw   r$   r$   r%   r     r;   zMultiDictProxy.__eq__c                 C   s
   || j v S r1   rB   r   r$   r$   r%   rV     r;   zMultiDictProxy.__contains__c                 C   s.   d dd |  D }d| jj d| dS )Nrc   c                 s   s$    | ]\}}d | d|V  qdS r   r$   )r   rT   rU   r$   r$   r%   r     s   " z*MultiDictProxy.__repr__.<locals>.<genexpr>rd   re   rf   )ri   r   rj   r   r   r$   r$   r%   rn     s   zMultiDictProxy.__repr__c                 C   r   r   )r   r   r5   r$   r$   r%   r        zMultiDictProxy.copyr1   )'r   r   r   r    r   r&   r#   r   r3   r   r   r   r"   rL   r   r'   r)   r(   r   r   r   r   r6   r>   rF   r   r   r   r   r   r   r   r   r   rV   r   r   rn   r   r$   r$   r$   r%   r   ;  sZ   
 $

	 


 *r   c                       sH   e Zd ZdZdeee ee f f fddZde	e fddZ
  ZS )CIMultiDictProxyz)Read-only proxy for CIMultiDict instance.ro   c                    s0   t |ttfstdt| t | d S )Nz<ctor requires CIMultiDict or CIMultiDictProxy instance, not )rJ   r   r   rN   r   superr3   rp   rj   r$   r%   r3     s   zCIMultiDictProxy.__init__r4   c                 C   r   r   )r   r   r5   r$   r$   r%   r     r   zCIMultiDictProxy.copy)r   r   r   r    r   r   r&   r   r3   r   r   __classcell__r$   r$   r  r%   r     s    "	r   r@   r4   c                 C   s.   t | tr| j} | jS t | tstd| jS )Nz&Parameter should be multidict or proxy)rJ   r   rC   r   rN   rY   )r@   r$   r$   r%   
getversion  s   

r  )4enumr   r   r   collections.abcr   r   r   r   r   r   r	   typingr
   r   r   r   r   r   r   r   r   _abcr   r   r   r   version_infor   typing_extensionsr"   r   r&   r'   Enumr(   r)   rY   r+   r?   rG   r   r   r   r   r   r   r   r   r   r>   r  r$   r$   r$   r%   <module>   s@    $,	
 0   ob&