o
    h                     @   sX  d dl Z 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 d dlmZ d dlmZ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r\d 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/de0d e0fd!d"Z1eG d#d$ d$ee# Z2eG d%d& d&ee# Z3G d'd( d(e.ee# Z4G d)d* d*e/e4e# Z5G d+d, d,e.ee# Z6G d-d. d.e/e6e# Z7d/ee4e8 e6e8 f d e0fd0d1Z9dS )2    N)array)	ItemsViewIterableIteratorKeysViewMapping
ValuesView)	dataclass)
TYPE_CHECKINGAnyClassVar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%   T/var/www/Befach/backend/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-   )selfr0   r1   r%   r%   r&   __init__7      
z_Iter.__init__returnc                 C   s   | S r2   r%   r3   r%   r%   r&   __iter__;      z_Iter.__iter__c                 C   
   t | jS r2   )nextr/   r7   r%   r%   r&   __next__>      
z_Iter.__next__c                 C      | j S r2   )r.   r7   r%   r%   r&   __length_hint__A      z_Iter.__length_hint__N)r   r   r    	__slots__intr   r(   r4   r   r8   r<   r?   r%   r%   r%   r&   r,   4   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 r2   _mdr3   rD   r%   r%   r&   r4   F   s   
z_ViewBase.__init__r6   c                 C   r:   r2   lenrG   r7   r%   r%   r&   __len__L   r=   z_ViewBase.__len__N)rD   rE   )r   r   r    r4   rB   rK   r%   r%   r%   r&   rC   E   s
    
rC   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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itemr6   c           	      C   s   t |ttfrt|dkrdS |\}}z| j|}W n
 ty%   Y dS w t|}| jj	|D ]\}}}|j
|krC||jkrC dS q1dS )N   FT)
isinstancetuplelistrJ   rG   	_identity	TypeErrorhash_keys	iter_hashidentityvalue)	r3   rM   keyrX   rW   hash_slotidxer%   r%   r&   __contains__Q   s   z_ItemsView.__contains__c                 C      t t| | | jjS r2   r,   rJ   r/   rG   _versionr7   r%   r%   r&   r8   _      z_ItemsView.__iter__versionc                 c   sB    | j j D ]}|| j jkrtd| j |j|jfV  qd S Nz#Dictionary changed during iteration)rG   rU   iter_entriesra   RuntimeError_keyrY   rX   r3   rc   r]   r%   r%   r&   r/   b   s   z_ItemsView._iterc                 C   sP   g }| j j D ]}|d|j d|j qd|}d| jj d| dS )N'': , <()>)	rG   rU   re   appendrY   rX   join	__class__r   r3   lstr]   bodyr%   r%   r&   __repr__h   s
   
z_ItemsView.__repr__argc                 C   s^   t |tsd S t|dkrd S z| j|d }t|||d |d fW S  ty.   Y d S w )NrN   r   r   )rO   rP   rJ   rG   rR   rT   rS   )r3   rv   rW   r%   r%   r&   _parse_itemp   s   
z_ItemsView._parse_itemitc                 C   s>   t  }|D ]}| |}|d u rq||d |d f q|S )Nr   r   )setrw   add)r3   rx   tmprv   rM   r%   r%   r&   _tmp_set}   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 ]\}
}}d|_|j	|krK|j
|	krK||j|j
f q0| jj| q|S )N)ry   iterrS   NotImplementedrw   rG   rU   rV   rT   rW   rX   rz   rY   restore_hashr3   r}   retrx   rv   rM   rZ   rW   rY   rX   r[   r\   r]   r%   r%   r&   __and__   s$   
z_ItemsView.__and__c                 C   s   t  }zt|}W n ty   t Y S w |D ]0}| |}|d u r#q|\}}}}	| jj|D ]\}
}}|j|krF|j	|	krF|
|  nq0q|S r2   )ry   r   rS   r   rw   rG   rU   rV   rW   rX   rz   r   r%   r%   r&   __rand__   s"   

z_ItemsView.__rand__c                 C   s   t | }zt|}W n ty   t Y S w |D ]5}| |}|d u r)|| q|\}}}}	| jj|D ]\}
}}|j	|krG|j
|	krG nq6|| q|S r2   ry   r   rS   r   rw   rz   rG   rU   rV   rW   rX   r   r%   r%   r&   __or__   s&   


z_ItemsView.__or__c                 C   sf   zt |}W n ty   t Y S w | |}| jj D ]}|j|jf|vr0|	|j
|jf q|S r2   )ry   rS   r   r|   rG   rU   re   rW   rX   rz   rY   )r3   r}   r   r{   r]   r%   r%   r&   __ror__   s   
z_ItemsView.__ror__c                 C   sl   t  }zt|}W n ty   t Y S w | |}| jj D ]}|j|j	f|vr3|
|j|j	f q |S r2   )ry   r   rS   r   r|   rG   rU   re   rW   rX   rz   rY   )r3   r}   r   rx   r{   r]   r%   r%   r&   __sub__   s   
z_ItemsView.__sub__c                 C   s   t  }zt|}W n ty   t Y S w |D ]5}| |}|d u r(|| q|\}}}}	| jj|D ]\}
}}|j	|krF|j
|	krF nq5|| q|S r2   r   r   r%   r%   r&   __rsub__   s&   


z_ItemsView.__rsub__c                 C   <   zt |}W n ty   t Y S w | | }|||  O }|S r2   ry   rS   r   r3   r}   rgtr   r%   r%   r&   __xor__      z_ItemsView.__xor__c                 C   sd   |D ]-}|  |}|d u rq|\}}}}| jj|D ]\}}	}
|
j|kr.|
j|kr.  dS qqdS NFT)rw   rG   rU   rV   rW   rX   )r3   r}   rv   rM   rZ   rW   rY   rX   r[   r\   r]   r%   r%   r&   
isdisjoint   s   
z_ItemsView.isdisjointN)"r   r   r    objectboolr^   r,   rP   r#   r'   r8   rB   r   r/   reprlibrecursive_reprru   r   r(   r   rw   r   ry   r|   r   r   r   r   r   r   r   r   __rxor__r   r%   r%   r%   r&   rL   P   s*    
""
****	"rL   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 )_ValuesViewrX   r6   c                 C   s&   | j j D ]
}|j|kr dS qdS )NTF)rG   rU   re   rX   )r3   rX   r]   r%   r%   r&   r^     s
   
z_ValuesView.__contains__c                 C   r_   r2   r`   r7   r%   r%   r&   r8   
  rb   z_ValuesView.__iter__rc   c                 c   s4    | j j D ]}|| j jkrtd|jV  qd S rd   )rG   rU   re   ra   rf   rX   rh   r%   r%   r&   r/     s   
z_ValuesView._iterc                 C   sF   g }| j j D ]
}|t|j qd|}d| jj d| dS )Nrk   rl   rm   rn   )	rG   rU   re   ro   reprrX   rp   rq   r   rr   r%   r%   r&   ru     s
   
z_ValuesView.__repr__N)r   r   r    r   r   r^   r,   r'   r8   rB   r   r/   r   r   r#   ru   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 )	_KeysViewrY   r6   c                 C   sP   t |tsdS | j|}t|}| jj|D ]\}}}|j|kr% dS qdS r   )rO   r#   rG   rR   rT   rU   rV   rW   r3   rY   rW   rZ   r[   r\   r]   r%   r%   r&   r^     s   

z_KeysView.__contains__c                 C   r_   r2   r`   r7   r%   r%   r&   r8   '  rb   z_KeysView.__iter__rc   c                 c   s<    | j j D ]}|| j jkrtd| j |jV  qd S rd   )rG   rU   re   ra   rf   rg   rY   rh   r%   r%   r&   r/   *  s   z_KeysView._iterc                 C   sJ   g }| j j D ]}|d|j d qd|}d| jj d| dS )Nri   rk   rl   rm   rn   )rG   rU   re   ro   rY   rp   rq   r   rr   r%   r%   r&   ru   0  s
   
z_KeysView.__repr__r}   c           
      C   s   t  }zt|}W n ty   t Y S w |D ],}t|tsq| j|}t|}| jj	
|D ]\}}}	|	j|krB||	j  nq0q|S r2   )ry   r   rS   r   rO   r#   rG   rR   rT   rU   rV   rW   rz   rY   
r3   r}   r   rx   rY   rW   rZ   r[   r\   r]   r%   r%   r&   r   7  s$   

z_KeysView.__and__c                 C   sb   t  }zt|}W n ty   t Y S w |D ]}t|tsq|| jv r)|| qtt t	 |S r2   )
ry   r   rS   r   rO   r#   rG   rz   r   r(   r3   r}   r   rx   rY   r%   r%   r&   r   H  s   


z_KeysView.__rand__c                 C   sd   t | }zt|}W n ty   t Y S w |D ]}t|ts%|| q|| jvr/|| q|S r2   )ry   r   rS   r   rO   r#   rz   rG   r   r%   r%   r&   r   U  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 ]}|j
|vr>||j q1|S r2   )ry   rS   r   rO   r#   rG   rR   rz   rU   re   rW   rY   )r3   r}   r   r{   rY   rW   r]   r%   r%   r&   r   c  s    

z_KeysView.__ror__c           
      C   s   t | }zt|}W n ty   t Y S w |D ],}t|ts q| j|}t|}| jj	
|D ]\}}}	|	j|krC||	j  nq1q|S r2   )ry   r   rS   r   rO   r#   rG   rR   rT   rU   rV   rW   discardrY   r   r%   r%   r&   r   u  s$   

z_KeysView.__sub__c                 C   sR   zt |}W n ty   t Y S w |D ]}t|tsq|| jv r&|| q|S r2   )ry   rS   r   rO   r#   rG   r   )r3   r}   r   rY   r%   r%   r&   r     s   


z_KeysView.__rsub__c                 C   r   r2   r   r   r%   r%   r&   r     r   z_KeysView.__xor__c                 C   s*   |D ]}t |ts
q|| jv r dS qdS r   )rO   r#   rG   )r3   r}   rY   r%   r%   r&   r     s   

z_KeysView.isdisjointN)r   r   r    r   r   r^   r,   r#   r8   rB   r   r/   ru   r   ry   r   r(   r   r   r   r   r   r   r   r   r   r%   r%   r%   r&   r     s    
"""	r   c                   @   B   e Zd ZU dZee ed< dedefddZdedefddZ	d	S )
_CSMixinF_cirY   r6   c                 C   s   |S r2   r%   r3   rY   r%   r%   r&   rg     r9   z_CSMixin._keyc                 C   s   t |tr|S tdNz8MultiDict keys should be either str or subclasses of str)rO   r#   rS   r   r%   r%   r&   rR     s   
z_CSMixin._identityN
r   r   r    r   r   r   r$   r#   rg   rR   r%   r%   r%   r&   r     s   
 r   c                   @   r   )
_CIMixinTr   rY   r6   c                 C   s   t |tu r|S t|S r2   )typer   r   r%   r%   r&   rg     s   z_CIMixin._keyc                 C   sD   t |tr|j}|d u r| }||_|S t |tr| S tdr   )rO   r   r   lowerr#   rS   )r3   rY   r   r%   r%   r&   rR     s   

z_CIMixin._identityNr   r%   r%   r%   r&   r     s   
 r   nr6   c                 C   s   | d d d dB   S )Nr   r   rN      )
bit_length)r   r%   r%   r&   estimate_log2_keysize  s   r   c                   @   s.   e Zd ZU eed< eed< eed< eed< dS )_EntryrT   rW   rY   rX   N)r   r   r    rB   r$   r#   r'   r%   r%   r%   r&   r     s
   
 r   c                	   @   sz  e Zd ZU dZee ed< dZee ed< dd eddD Z	ee
eef  ed< eed	< eed
< eed< eeee   ed< ejdefddZejdefddZejjdkr`defddZed	edeeee   defddZd*ddZdeddfddZdedefdd Zdedee eeee f  fd!d"Z!ded#eddfd$d%Z"deee  fd&d'Z#deddfd(d)Z$dS )+_HtKeysr   LOG_MINSIZE   MINSIZEc              	   C   s6   i | ]}|t |d k rdnddd td|> D qS )r   bhc                 s       | ]}d V  qdS r~   Nr%   .0ir%   r%   r&   	<genexpr>      z_HtKeys.<dictcomp>.<genexpr>r   )r   range)r   	log2_sizer%   r%   r&   
<dictcomp>  s    "z_HtKeys.<dictcomp>
   PREALLOCATED_INDICESr   usableindicesentriesr6   c                 C   s
   d| j > S Nr   )r   r7   r%   r%   r&   nslots     
z_HtKeys.nslotsc                 C   s
   | j d S r   )r   r7   r%   r%   r&   mask  r   z_HtKeys.maskpypyc                 C   s"   t | t| j t| j S r2   )r   
__sizeof__sys	getsizeofr   r   r7   r%   r%   r&   r     s   

z_HtKeys.__sizeof__c                 C   s   d|> }|d> d }|dk r| j |  }n.|dk r'tddd t|D }n|dk r8td	d
d t|D }ntddd t|D }| ||||d}|S )Nr   r   r      r   c                 s   r   r   r%   r   r%   r%   r&   r     r   z_HtKeys.new.<locals>.<genexpr>    lc                 s   r   r   r%   r   r%   r%   r&   r     r   qc                 s   r   r   r%   r   r%   r%   r&   r     r   r   r   r   r   )r   __copy__r   r   )clsr   r   r0   r   r   r   r%   r%   r&   new  s    z_HtKeys.new_HtKeys[_V]c                 C   s*   dd | j D }t| j| j| j |dS )Nc                 S   s.   g | ]}|d urt |j|j|j|jnd qS r2   )r   rT   rW   rY   rX   r   r]   r%   r%   r&   
<listcomp>  s     z!_HtKeys.clone.<locals>.<listcomp>r   )r   r   r   r   r   r   )r3   r   r%   r%   r&   clone  s   z_HtKeys.cloneupdateNc           	      C   s   | j }| j}t| jD ]F\}}|d usJ |j}|r$|dkr#t|j}n|dks*J ||@ }|tj@ }|| dkrM|dL }||d | d @ }|| dks9|||< qd S Nr~      r   )r   r   	enumerater   rT   rW   r   maxsize)	r3   r   r   r   r\   r]   rZ   r   perturbr%   r%   r&   build_indices  s$   


z_HtKeys.build_indicesrZ   c                 C   s^   | j }| j}||@ }|tj@ }|| }|dkr-|dL }|d | d |@ }|| }|dks|S r   r   r   r   r   )r3   rZ   r   r   r   r   ixr%   r%   r&   find_empty_slot+  s   
z_HtKeys.find_empty_slotc           	      c   s    | j }| j}| j}||@ }|tj@ }|| }|dkrF|dkr.|| }|j|kr.|||fV  |dL }|d | d |@ }|| }|dksd S d S Nr~   r   r   r   r   r   r   r   rT   )	r3   rZ   r   r   r   r   r   r   r]   r%   r%   r&   rV   7  s    

z_HtKeys.iter_hashr\   c                 C   sf   | j }| j}||@ }|tj@ }|| }||kr-|dL }|d | d |@ }|| }||ksd||< d S )Nr   r   r   r   )r3   rZ   r\   r   r   r   r   r   r%   r%   r&   del_idxG  s   
z_HtKeys.del_idxc                 C   s   t d | jS r2   )filterr   r7   r%   r%   r&   re   S     z_HtKeys.iter_entriesc           	      C   s   | j }| j}| j}||@ }|tj@ }|| }|dkrB|dkr*|| }|jdkr*||_|dL }|d | d |@ }|| }|dksd S d S r   r   )	r3   rZ   r   r   r   r   r   r   entryr%   r%   r&   r   V  s   

z_HtKeys.restore_hash)r6   r   )%r   r   r    r   r   rB   r$   r   r   r   dictr   rQ   r   r   r'   	functoolscached_propertyr   r   r   implementationnamer   classmethodr   r   r   r   r   r   r   rP   rV   r   re   r   r%   r%   r%   r&   r     s2   
 $
$r   c                   @   sh  e Zd ZdZdZdpdee defddZdqd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dpd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/d0Z(d
e)e*e+ e)ee)e
ef   f fd1d2Z,de
d3ed
dfd4d5Z-d
e+fd6d7Z.e.Z/dpdee ded
dfd8d9Z0dee de1e
ef d
eeee2e f  fd:d;Z3d<e4e2e  d
dfd=d>Z5drd?d@Z6de
d3ed
dfdAdBZ7de
d
dfdCdDZ8e		dpdEdFde
ddd
eedf fdGdHZ9e	de
ded
efdIdHZ9dpde
deedf d
eedf fdJdHZ9e	de
d
efdKdLZ:e	de
ded
eeef fdMdLZ:efde
deeef d
eeef fdNdLZ:e;se:Z<e	de
d
ee fdOdPZ=e	de
ded
eee ef fdQdPZ=efde
deeef d
eee ef fdRdPZ=d
e)e
ef fdSdTZ>dpdee ded
dfdUdVZ?d<ee2e  d
dfdWdXZ@drdYdZZAdpdee ded
dfd[d\ZBd<ee2e  d
dfd]d^ZCdrd_d`ZDdaedbed
dfdcddZEdee2e d
dfdfdgZFdee2e d
dfdhdiZGdjedked
dfdldmZHdee2e d
dfdndoZIdS )s	MultiDictz/Dictionary with the support for duplicate keys.)rU   _usedra   Nrv   kwargsc                K   s   d| _ t}|d  d7  < |d | _|s7d }t|tr|j}nt|tr&|}|d ur7|j| ju r7| | d S | ||}t	t
tt|}|dkrLd}t|g | _| t
ttt  | d S )Nr   r      )r   ra   rO   MultiDictProxyrG   r   r   _from_md_parse_argsr   r   rB   r;   r   r   rU   _extend_itemsr   r   r'   )r3   rv   r   vrD   rx   r   r%   r%   r&   r4   l  s&   



zMultiDict.__init__rD   rE   r6   c                 C   s   |j  | _ |j| _d S r2   )rU   r   r   rH   r%   r%   r&   r     s   zMultiDict._from_mdrY   c                 C      d S r2   r%   r   r%   r%   r&   getall  r9   zMultiDict.getalldefaultc                 C   r   r2   r%   r3   rY   r   r%   r%   r&   r     r9   c                 C   s   |  |}t|}g }g }| j|D ]\}}}	|	j|kr+||	j d|	_|| q|r>| jj}
|D ]}||
| _q4|S |sF|turF|S t	d| )-Return a list of all values matching the key.r~   Key not found: %r)
rR   rT   rU   rV   rW   ro   rX   r   r*   KeyError)r3   rY   r   rW   rZ   resrestorer[   r\   r]   r   r%   r%   r&   r     s$   


c                 C   r   r2   r%   r   r%   r%   r&   getone  r9   zMultiDict.getonec                 C   r   r2   r%   r   r%   r%   r&   r     r9   c                 C   sV   |  |}t|}| j|D ]\}}}|j|kr|j  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   )rR   rT   rU   rV   rW   rX   r*   r   r3   rY   r   rW   rZ   r[   r\   r]   r%   r%   r&   r     s   


c                 C   
   |  |S r2   r   r   r%   r%   r&   __getitem__  r=   zMultiDict.__getitem__c                C   r   r2   r%   r   r%   r%   r&   get  r9   zMultiDict.getc                C   r   r2   r%   r   r%   r%   r&   r    r9   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   s   t |  S r2   )r   keysr7   r%   r%   r&   r8     r   zMultiDict.__iter__c                 C   r>   r2   )r   r7   r%   r%   r&   rK     r@   zMultiDict.__len__c                 C      t | S z+Return a new view of the dictionary's keys.)r   r7   r%   r%   r&   r       zMultiDict.keysc                 C   r  zAReturn a new view of the dictionary's items *(key, value) pairs).)rL   r7   r%   r%   r&   items  r
  zMultiDict.itemsc                 C   r  z-Return a new view of the dictionary's values.)r   r7   r%   r%   r&   values  r
  zMultiDict.valuesr}   c           	      C   s   t |tstS t |tr| |jkS t |trC| j}|j}| j|jkr$dS t|	 |	 D ]\}}|j
|j
ks=|j|jkr@ dS q-dS | jt|krLdS |  D ]\}}||t}||kra dS qPdS r   )rO   r   r   r   rG   r   rU   r   zipre   rW   rX   rJ   r  r  r*   )	r3   r}   lftrhte1e2kr   nvr%   r%   r&   __eq__  s,   



zMultiDict.__eq__c                 C   sL   t |tsdS | |}t|}| j|D ]\}}}|j|kr# dS qdS r   )rO   r#   rR   rT   rU   rV   rW   r   r%   r%   r&   r^     s   


zMultiDict.__contains__c                 C   s0   d dd | j D }d| jj d| dS )Nrk   c                 s   s$    | ]}d |j  d|jV  qdS ri   rj   NrY   rX   r   r%   r%   r&   r        " z%MultiDict.__repr__.<locals>.<genexpr>rl   rm   rn   )rp   rU   re   rq   r   r3   rt   r%   r%   r&   ru     s   zMultiDict.__repr__r   c                 C   s   t | t| j S r2   )r   r   r   r   rU   r7   r%   r%   r&   r     s   zMultiDict.__sizeof__c                 C   s   | j t|  ffS r2   )rq   rQ   r  r7   r%   r%   r&   
__reduce__     zMultiDict.__reduce__rX   c                 C   s2   |  |}t|}| t|||| |   d S r2   )rR   rT   _add_with_hashr   _incr_version)r3   rY   rX   rW   rZ   r%   r%   r&   rz     s   
zMultiDict.addc                 C   s   | j }|| S zReturn a copy of itself.rq   )r3   r   r%   r%   r&   copy  s   zMultiDict.copyc                K   sL   |  ||}| jttt| }| t|d | ttt	t
  | dS )zhExtend current MultiDict with more values.

        This method must be used instead of update.
        FN)r   r   r   rB   r;   _resizer   r   r   r   r'   )r3   rv   r   rx   newsizer%   r%   r&   extend  s   zMultiDict.extendc           
      #   s   | j } rt tr j t trmt t| V  | j jur< j D ]}||j	}t
t|||j	|jV  q'n j D ]}t
|j|j|j	|jV  qA|ri| D ]\}}||}t
t||||V  qVd S d S t drttt    fdd  D  |rt   t|  zt t| V  W n ty   dV  Y nw t D ]+\}}	t|	dkstd| dt|	 d||	d }t
t|||	d |	d	 V  qd S t|V  | D ]\}}||}t
t||||V  qd S )
Nr  c                    s   g | ]}| | fqS r%   r%   )r   r  rv   r%   r&   r   7      z)MultiDict._parse_args.<locals>.<listcomp>r   rN   z#multidict update sequence element #zhas length z; 2 is requiredr   )rR   rO   r   rG   r   rJ   r   rU   re   rY   r   rT   rX   rW   r  hasattrr   r   r'   r  rQ   r$  rS   r   
ValueError)
r3   rv   r   identity_funcr]   rW   rY   rX   posrM   r%   r%  r&   r     s\   





	zMultiDict._parse_argsr  c                 C   s    |D ]}|  | q|   d S r2   )r  r  )r3   r  r]   r%   r%   r&   r   M  s   zMultiDict._extend_itemsc                 C   s"   d| _ ttjg | _|   dS )z Remove all items from MultiDict.r   N)r   r   r   r   rU   r  r7   r%   r%   r&   clearR  s   zMultiDict.clearc           	      C   s   |  |}t|}d}| j|D ]'\}}}|j|kr8|s-||_||_d|_d}|   q|jdkr8| || q|sG| 	t
|||| d S | j| d S )NFr~   T)rR   rT   rU   rV   rW   rY   rX   r  _del_atr  r   r   )	r3   rY   rX   rW   rZ   foundr[   r\   r]   r%   r%   r&   __setitem__Z  s"   



zMultiDict.__setitem__c                 C   s`   d}|  |}t|}| j|D ]\}}}|j|kr#| || d}q|s*t||   d S r   )rR   rT   rU   rV   rW   r,  r   r  )r3   rY   r-  rW   rZ   r[   r\   r]   r%   r%   r&   __delitem__o  s   

zMultiDict.__delitem__r3   zMultiDict[Union[_T, None]]c                 C   r   r2   r%   r   r%   r%   r&   
setdefault|  s   zMultiDict.setdefaultc                 C   r   r2   r%   r   r%   r%   r&   r0    r9   c                 C   sN   |  |}t|}| j|D ]\}}}|j|kr|j  S q| || |S )zAReturn value for key, set value to default if key is not present.)rR   rT   rU   rV   rW   rX   rz   r  r%   r%   r&   r0    s   


c                 C   r   r2   r%   r   r%   r%   r&   popone  r9   zMultiDict.poponec                 C   r   r2   r%   r   r%   r%   r&   r1    r9   c           	      C   sj   |  |}t|}| j|D ]\}}}|j|kr*|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.

        )
rR   rT   rU   rV   rW   rX   r,  r  r*   r   )	r3   rY   r   rW   rZ   r[   r\   r]   rX   r%   r%   r&   r1    s   
	
c                 C   r   r2   r%   r   r%   r%   r&   popall  r9   zMultiDict.popallc                 C   r   r2   r%   r   r%   r%   r&   r2    r9   c           
      C   s|   d}|  |}t|}g }| j|D ]\}}}	|	j|kr/d}||	j | || |   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.

        FT)rR   rT   rU   rV   rW   ro   rX   r,  r  r*   r   )
r3   rY   r   r-  rW   rZ   r   r[   r\   r]   r%   r%   r&   r2    s    


c                 C   s   | j dkr	tdt| jjd }| jj }|du r)|d8 }| jj }|du s| |j|jf}| j	|j
| |  j d8  _ |   |S )z1Remove and return an arbitrary (key, value) pair.r   zempty multidictr   N)r   r   rJ   rU   r   poprg   rY   rX   r   rT   r  )r3   r*  r   r   r%   r%   r&   popitem  s   
zMultiDict.popitemc                K   ~   |  ||}| jttt| }t|}|dkrd}|| jjkr&| |d z| 	tt
tt  | W |   dS |   w )z1Update the dictionary, overwriting existing keys.r   FN)r   r   r   rB   r;   r   rU   r   r"  _update_itemsr   r   r'   _post_updater3   rv   r   rx   r#  r   r%   r%   r&   r        zMultiDict.updatec           	      C   sx   |D ]7}d}|j }|j}| j|D ]\}}}|j|kr1|s,d}|j|_|j|_d|_ q| | q|s9| | qd S )NFTr~   )rT   rW   rU   rV   rY   rX   _del_at_for_upd_add_with_hash_for_upd)	r3   r  r   r-  rZ   rW   r[   r\   r]   r%   r%   r&   r6    s"   


zMultiDict._update_itemsc                 C   s   | j }|j}|j}t|jD ]3}|| }|dkrA|| }|d us"J |jd u r6d ||< d||< |  jd8  _|jdkrAt|j|_q| 	  d S )Nr   r   r   r~   )
rU   r   r   r   r   rY   r   rT   rW   r  )r3   r  r   r   r[   r\   r  r%   r%   r&   r7    s    

zMultiDict._post_updatec                K   r5  )z4Merge into the dictionary, adding non-existing keys.r   FN)r   r   r   rB   r;   r   rU   r   r"  _merge_itemsr   r   r'   r7  r8  r%   r%   r&   merge  r9  zMultiDict.mergec                 C   sJ   |D ] }|j }|j}| j|D ]\}}}|j|kr nq| | qd S r2   )rT   rW   rU   rV   r;  )r3   r  r   rZ   rW   r[   r\   r]   r%   r%   r&   r<     s   

zMultiDict._merge_itemsc                 C   s"   t }|d  d7  < |d | _ d S )Nr   r   )ra   )r3   r   r%   r%   r&   r  *  s   zMultiDict._incr_versionlog2_newsizer   c                 C   s`   | j }| j}t|j|kr|j}ndd |jD }t||}| j|8  _|| || _ d S )Nc                 S   s   g | ]}|d ur|qS r2   r%   r   r%   r%   r&   r   6  r&  z%MultiDict._resize.<locals>.<listcomp>)rU   r   rJ   r   r   r   r   r   )r3   r>  r   oldkeys
newentriesr   newkeysr%   r%   r&   r"  /  s   

zMultiDict._resizer   c                 C   s   | j jdkr| | jd tjd B  d | j }||j}t	|j
|j|< |j
| |   |  jd7  _| jd8  _d S )Nr   r   r   FrU   r   r"  r   r   r   r   r   rT   rJ   r   r   ro   r  r3   r   r  r[   r%   r%   r&   r  <  s    zMultiDict._add_with_hashc                 C   s   | j jdkr| | jd tjd B  d | j }||j}t	|j
|j|< d|_|j
| |   |  jd7  _| jd8  _d S )Nr   r   r   Tr~   rB  rC  r%   r%   r&   r;  G  s    z MultiDict._add_with_hash_for_updr[   r\   c                 C   s*   d | j j|< d| j j|< |  jd8  _d S )Nr   r   )rU   r   r   r   )r3   r[   r\   r%   r%   r&   r,  S  s   zMultiDict._del_atc                 C   s   d |_ d |_d S r2   r  )r3   r   r%   r%   r&   r:  X  r5   zMultiDict._del_at_for_updr2   )rD   rE   r6   N)r6   N)Jr   r   r    r!   rA   r   r'   r4   r   r   r#   rQ   r   r(   r   r*   r)   r   r  r  r   r8   rB   rK   r   r  r   r  r   r  r   r   r  r^   r   r   ru   r   r   r   r   rP   r   r   r  rz   r!  r   r$  r   r   r   r   r   r+  r.  r/  r0  r1  r
   r3  r2  r4  r   r6  r7  r=  r<  r  r"  r  r;  r,  r:  r%   r%   r%   r&   r   g  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&   rD  ]  s    rD  c                
   @   s<  e Zd ZU dZ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 )0r   z'Read-only proxy for MultiDict instance.rF   rG   rv   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 )rO   r   r   rS   r   rG   r3   rv   r%   r%   r&   r4   h  s   

zMultiDictProxy.__init__r6   c                 C   s   t d| jj d)Nzcan't pickle z objects)rS   rq   r   r7   r%   r%   r&   r  r  r  zMultiDictProxy.__reduce__rY   c                 C   r   r2   r%   r   r%   r%   r&   r   u  r9   zMultiDictProxy.getallr   c                 C   r   r2   r%   r   r%   r%   r&   r   w  r9   c                 C   "   |t ur| j||S | j|S )r   )r*   rG   r   r   r%   r%   r&   r   y  s   c                 C   r   r2   r%   r   r%   r%   r&   r     r9   zMultiDictProxy.getonec                 C   r   r2   r%   r   r%   r%   r&   r     r9   c                 C   rF  )r   )r*   rG   r   r   r%   r%   r&   r     s   c                 C   r  r2   r  r   r%   r%   r&   r    r=   zMultiDictProxy.__getitem__Nc                C   r   r2   r%   r   r%   r%   r&   r    r9   zMultiDictProxy.getc                C   r   r2   r%   r   r%   r%   r&   r    r9   c                 C   s   | j ||S r  )rG   r   r   r%   r%   r&   r    s   c                 C   s   t | j S r2   )r   rG   r  r7   r%   r%   r&   r8     s   zMultiDictProxy.__iter__c                 C   r:   r2   rI   r7   r%   r%   r&   rK     r=   zMultiDictProxy.__len__c                 C   
   | j  S r	  )rG   r  r7   r%   r%   r&   r    r   zMultiDictProxy.keysc                 C   rG  r  )rG   r  r7   r%   r%   r&   r    r   zMultiDictProxy.itemsc                 C   rG  r  )rG   r  r7   r%   r%   r&   r    r   zMultiDictProxy.valuesr}   c                 C   s
   | j |kS r2   rF   )r3   r}   r%   r%   r&   r    r=   zMultiDictProxy.__eq__c                 C   s
   || j v S r2   rF   r   r%   r%   r&   r^     r=   zMultiDictProxy.__contains__c                 C   s.   d dd |  D }d| jj d| dS )Nrk   c                 s   s$    | ]\}}d | d|V  qdS r  r%   )r   r  r   r%   r%   r&   r     r  z*MultiDictProxy.__repr__.<locals>.<genexpr>rl   rm   rn   )rp   r  rq   r   r  r%   r%   r&   ru     s   zMultiDictProxy.__repr__c                 C   r:   r  )r   rG   r7   r%   r%   r&   r!    r   zMultiDictProxy.copyr2   )(r   r   r    r!   rA   r   r'   r$   r   r4   r   r  r   r#   rQ   r   r(   r*   r)   r   r  r  r   r8   rB   rK   r   r  r   r  r   r  r   r   r  r^   r   r   ru   r!  r%   r%   r%   r&   r   a  s\   
 
$

	 


 *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.rv   c                    s0   t |ttfstdt| t | d S )Nz<ctor requires CIMultiDict or CIMultiDictProxy instance, not )rO   rD  rH  rS   r   superr4   rE  r   r%   r&   r4     s   zCIMultiDictProxy.__init__r6   c                 C   r:   r  )rD  rG   r7   r%   r%   r&   r!    r   zCIMultiDictProxy.copy)r   r   r    r!   r   r   r'   r   r4   rD  r!  __classcell__r%   r%   r   r&   rH    s    "	rH  rD   c                 C   s.   t | tr| j} | jS t | tstd| jS )Nz&Parameter should be multidict or proxy)rO   r   rG   r   rS   ra   )rD   r%   r%   r&   
getversion  s   

rK  ):enumr   r   r   r   collections.abcr   r   r   r   r   r   dataclassesr	   typingr
   r   r   r   r   r   r   r   r   r   _abcr   r   r   r   version_infor   typing_extensionsr#   r   r'   r(   Enumr)   r*   ra   r,   rC   rL   r   r   r   r   rB   r   r   r   r   rD  r   rH  r   rK  r%   r%   r%   r&   <module>   sR     0
 4     yc&