o
    i                     @   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__Z__is_istr__r   r   str__annotations__ r$   r$   Q/home/kim/smarthome/.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__7      
z_Iter.__init__returnc                 C   s   | S r1   r$   r2   r$   r$   r%   __iter__;      z_Iter.__iter__c                 C   
   t | jS r1   )nextr.   r6   r$   r$   r%   __next__>      
z_Iter.__next__c                 C      | j S r1   )r-   r6   r$   r$   r%   __length_hint__A      z_Iter.__length_hint__N)r   r   r    	__slots__intr   r'   r3   r   r7   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 r1   _mdr2   rC   r$   r$   r%   r3   F   s   
z_ViewBase.__init__r5   c                 C   r9   r1   lenrF   r6   r$   r$   r%   __len__L   r<   z_ViewBase.__len__N)rC   rD   )r   r   r    r3   rA   rJ   r$   r$   r$   r%   rB   E   s
    
rB   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itemr5   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listrI   rF   	_identity	TypeErrorhash_keys	iter_hashidentityvalue)	r2   rL   keyrW   rV   hash_slotidxer$   r$   r%   __contains__Q   s   z_ItemsView.__contains__c                 C      t t| | | jjS r1   r+   rI   r.   rF   _versionr6   r$   r$   r%   r7   _      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)rF   rT   iter_entriesr`   RuntimeError_keyrX   rW   r2   rb   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'': , <()>)	rF   rT   rd   appendrX   rW   join	__class__r   r2   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 )NrM   r   r   )rN   rO   rI   rF   rQ   rS   rR   )r2   ru   rV   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   )setrv   add)r2   rw   tmpru   rL   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)rx   iterrR   NotImplementedrv   rF   rT   rU   rS   rV   rW   ry   rX   restore_hashr2   r|   retrw   ru   rL   rY   rV   rX   rW   rZ   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 r1   )rx   r~   rR   r   rv   rF   rT   rU   rV   rW   ry   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 r1   rx   r~   rR   r   rv   ry   rF   rT   rU   rV   rW   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 r1   )rx   rR   r   r{   rF   rT   rd   rV   rW   ry   rX   )r2   r|   r   rz   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 r1   )rx   r~   rR   r   r{   rF   rT   rd   rV   rW   ry   rX   )r2   r|   r   rw   rz   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 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   rx   rR   r   r2   r|   Z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)rv   rF   rT   rU   rV   rW   )r2   r|   ru   rL   rY   rV   rX   rW   rZ   r[   r\   r$   r$   r%   
isdisjoint   s   
z_ItemsView.isdisjointN)"r   r   r    objectboolr]   r+   rO   r"   r&   r7   rA   r   r.   reprlibrecursive_reprrt   r   r'   r   rv   r   rx   r{   r   r   r   r   r   r   r   r   __rxor__r   r$   r$   r$   r%   rK   P   s*    
""
****	"rK   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 )_ValuesViewrW   r5   c                 C   s&   | j j D ]
}|j|kr dS qdS )NTF)rF   rT   rd   rW   )r2   rW   r\   r$   r$   r%   r]     s
   
z_ValuesView.__contains__c                 C   r^   r1   r_   r6   r$   r$   r%   r7   
  ra   z_ValuesView.__iter__rb   c                 c   s4    | j j D ]}|| j jkrtd|jV  qd S rc   )rF   rT   rd   r`   re   rW   rg   r$   r$   r%   r.     s   
z_ValuesView._iterc                 C   sF   g }| j j D ]
}|t|j qd|}d| jj d| dS )Nrj   rk   rl   rm   )	rF   rT   rd   rn   reprrW   ro   rp   r   rq   r$   r$   r%   rt     s
   
z_ValuesView.__repr__N)r   r   r    r   r   r]   r+   r&   r7   rA   r   r.   r   r   r"   rt   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 )	_KeysViewrX   r5   c                 C   sP   t |tsdS | j|}t|}| jj|D ]\}}}|j|kr% dS qdS r   )rN   r"   rF   rQ   rS   rT   rU   rV   r2   rX   rV   rY   rZ   r[   r\   r$   r$   r%   r]     s   

z_KeysView.__contains__c                 C   r^   r1   r_   r6   r$   r$   r%   r7   '  ra   z_KeysView.__iter__rb   c                 c   s<    | j j D ]}|| j jkrtd| j |jV  qd S rc   )rF   rT   rd   r`   re   rf   rX   rg   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 )Nrh   rj   rk   rl   rm   )rF   rT   rd   rn   rX   ro   rp   r   rq   r$   r$   r%   rt   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 r1   )rx   r~   rR   r   rN   r"   rF   rQ   rS   rT   rU   rV   ry   rX   
r2   r|   r   rw   rX   rV   rY   rZ   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 r1   )
rx   r~   rR   r   rN   r"   rF   ry   r   r'   r2   r|   r   rw   rX   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 r1   )rx   r~   rR   r   rN   r"   ry   rF   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 r1   )rx   rR   r   rN   r"   rF   rQ   ry   rT   rd   rV   rX   )r2   r|   r   rz   rX   rV   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 r1   )rx   r~   rR   r   rN   r"   rF   rQ   rS   rT   rU   rV   discardrX   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 r1   )rx   rR   r   rN   r"   rF   r   )r2   r|   r   rX   r$   r$   r%   r     s   


z_KeysView.__rsub__c                 C   r   r1   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   )rN   r"   rF   )r2   r|   rX   r$   r$   r%   r     s   

z_KeysView.isdisjointN)r   r   r    r   r   r]   r+   r"   r7   rA   r   r.   rt   r   rx   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_cirX   r5   c                 C   s   |S r1   r$   r2   rX   r$   r$   r%   rf     r8   z_CSMixin._keyc                 C   s   t |tr|S tdNz8MultiDict keys should be either str or subclasses of str)rN   r"   rR   r   r$   r$   r%   rQ     s   
z_CSMixin._identityN
r   r   r    r   r   r   r#   r"   rf   rQ   r$   r$   r$   r%   r     s   
 r   c                   @   r   )
_CIMixinTr   rX   r5   c                 C   s   t |tu r|S t|S r1   )typer   r   r$   r$   r%   rf     s   z_CIMixin._keyc                 C   sD   t |tr|j}|d u r| }||_|S t |tr| S tdr   )rN   r   r   lowerr"   rR   )r2   rX   r   r$   r$   r%   rQ     s   

z_CIMixin._identityNr   r$   r$   r$   r%   r     s   
 r   nr5   c                 C   s   | d d d dB   S )Nr   r   rM      )
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 )_EntryrS   rV   rX   rW   N)r   r   r    rA   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entriesr5   c                 C   s
   d| j > S Nr   )r   r6   r$   r$   r%   nslots     
z_HtKeys.nslotsc                 C   s
   | j d S r   )r   r6   r$   r$   r%   mask  r   z_HtKeys.maskpypyc                 C   s"   t | t| j t| j S r1   )r   
__sizeof__sys	getsizeofr   r   r6   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   r/   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 r1   )r   rS   rV   rX   rW   r   r\   r$   r$   r%   
<listcomp>  s     z!_HtKeys.clone.<locals>.<listcomp>r   )r   r   r   r   r   r   )r2   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   rS   rV   r   maxsize)	r2   r   r   r   r[   r\   rY   r   perturbr$   r$   r%   build_indices  s$   


z_HtKeys.build_indicesrY   c                 C   s^   | j }| j}||@ }|tj@ }|| }|dkr-|dL }|d | d |@ }|| }|dks|S r   r   r   r   r   )r2   rY   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   rS   )	r2   rY   r   r   r   r   r   r   r\   r$   r$   r%   rU   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   )r2   rY   r[   r   r   r   r   r   r$   r$   r%   del_idxG  s   
z_HtKeys.del_idxc                 C   s   t d | jS r1   )filterr   r6   r$   r$   r%   rd   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   )	r2   rY   r   r   r   r   r   r   entryr$   r$   r%   r   V  s   

z_HtKeys.restore_hash)r5   r   )%r   r   r    r   r   rA   r#   r   r   r   dictr   rP   r   r   r&   	functoolscached_propertyr   r   r   implementationnamer   classmethodr   r   r   r   r   r   r   rO   rU   r   rd   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.)rT   _usedr`   Nru   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   r`   rN   MultiDictProxyrF   r   r   _from_md_parse_argsr   r   rA   r:   r   r   rT   _extend_itemsr   r   r&   )r2   ru   r   vrC   rw   r   r$   r$   r%   r3   l  s&   



zMultiDict.__init__rC   rD   r5   c                 C   s   |j  | _ |j| _d S r1   )rT   r   r   rG   r$   r$   r%   r     s   zMultiDict._from_mdrX   c                 C      d S r1   r$   r   r$   r$   r%   getall  r8   zMultiDict.getalldefaultc                 C   r   r1   r$   r2   rX   r   r$   r$   r%   r     r8   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)
rQ   rS   rT   rU   rV   rn   rW   r   r)   KeyError)r2   rX   r   rV   rY   resZrestorerZ   r[   r\   r   r$   r$   r%   r     s$   


c                 C   r   r1   r$   r   r$   r$   r%   getone  r8   zMultiDict.getonec                 C   r   r1   r$   r   r$   r$   r%   r     r8   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   )rQ   rS   rT   rU   rV   rW   r)   r   r2   rX   r   rV   rY   rZ   r[   r\   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  r8   zMultiDict.getc                C   r   r1   r$   r   r$   r$   r%   r    r8   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 r1   )r~   keysr6   r$   r$   r%   r7     r   zMultiDict.__iter__c                 C   r=   r1   )r   r6   r$   r$   r%   rJ     r?   zMultiDict.__len__c                 C      t | S z+Return a new view of the dictionary's keys.)r   r6   r$   r$   r%   r       zMultiDict.keysc                 C   r  zAReturn a new view of the dictionary's items *(key, value) pairs).)rK   r6   r$   r$   r%   items  r  zMultiDict.itemsc                 C   r  z-Return a new view of the dictionary's values.)r   r6   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   )rN   r   r   r   rF   r   rT   r   ziprd   rV   rW   rI   r	  r  r)   )	r2   r|   ZlftZ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   )rN   r"   rQ   rS   rT   rU   rV   r   r$   r$   r%   r]     s   


zMultiDict.__contains__c                 C   s0   d dd | j D }d| jj d| dS )Nrj   c                 s   s$    | ]}d |j  d|jV  qdS rh   ri   NrX   rW   r   r$   r$   r%   r        " z%MultiDict.__repr__.<locals>.<genexpr>rk   rl   rm   )ro   rT   rd   rp   r   r2   rs   r$   r$   r%   rt     s   zMultiDict.__repr__r   c                 C   s   t | t| j S r1   )r   r   r   r   rT   r6   r$   r$   r%   r     s   zMultiDict.__sizeof__c                 C   s   | j t|  ffS r1   )rp   rP   r	  r6   r$   r$   r%   
__reduce__     zMultiDict.__reduce__rW   c                 C   s2   |  |}t|}| t|||| |   d S r1   )rQ   rS   _add_with_hashr   _incr_version)r2   rX   rW   rV   rY   r$   r$   r%   ry     s   
zMultiDict.addc                 C   s   | j }|| S zReturn a copy of itself.rp   )r2   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   rA   r:   _resizer   r   r   r   r&   )r2   ru   r   rw   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  ru   r$   r%   r   7      z)MultiDict._parse_args.<locals>.<listcomp>r   rM   z#multidict update sequence element #zhas length z; 2 is requiredr   )rQ   rN   r   rF   r   rI   r   rT   rd   rX   r   rS   rW   rV   r	  hasattrr   r   r&   r  rP   r  rR   r   
ValueError)
r2   ru   r   Zidentity_funcr\   rV   rX   rW   posrL   r$   r   r%   r     s\   





	zMultiDict._parse_argsr	  c                 C   s    |D ]}|  | q|   d S r1   )r  r  )r2   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   rT   r  r6   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)rQ   rS   rT   rU   rV   rX   rW   r  _del_atr  r   r   )	r2   rX   rW   rV   rY   foundrZ   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   )rQ   rS   rT   rU   rV   r&  r   r  )r2   rX   r'  rV   rY   rZ   r[   r\   r$   r$   r%   __delitem__o  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*    r8   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.)rQ   rS   rT   rU   rV   rW   ry   r   r$   r$   r%   r*    s   


c                 C   r   r1   r$   r   r$   r$   r%   popone  r8   zMultiDict.poponec                 C   r   r1   r$   r   r$   r$   r%   r+    r8   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.

        )
rQ   rS   rT   rU   rV   rW   r&  r  r)   r   )	r2   rX   r   rV   rY   rZ   r[   r\   rW   r$   r$   r%   r+    s   
	
c                 C   r   r1   r$   r   r$   r$   r%   popall  r8   zMultiDict.popallc                 C   r   r1   r$   r   r$   r$   r%   r,    r8   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)rQ   rS   rT   rU   rV   rn   rW   r&  r  r)   r   )
r2   rX   r   r'  rV   rY   r   rZ   r[   r\   r$   r$   r%   r,    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   rI   rT   r   poprf   rX   rW   r   rS   r  )r2   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   rA   r:   r   rT   r   r  _update_itemsr   r   r&   _post_updater2   ru   r   rw   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}   )rS   rV   rT   rU   rX   rW   _del_at_for_upd_add_with_hash_for_upd)	r2   r	  r   r'  rY   rV   rZ   r[   r\   r$   r$   r%   r0    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}   )
rT   r   r   r   r   rX   r   rS   rV   r  )r2   r  r   r   rZ   r[   r  r$   r$   r%   r1    s    

zMultiDict._post_updatec                K   r/  )z4Merge into the dictionary, adding non-existing keys.r   FN)r   r   r   rA   r:   r   rT   r   r  _merge_itemsr   r   r&   r1  r2  r$   r$   r%   merge  r3  zMultiDict.mergec                 C   sJ   |D ] }|j }|j}| j|D ]\}}}|j|kr nq| | qd S r1   )rS   rV   rT   rU   r5  )r2   r	  r   rY   rV   rZ   r[   r\   r$   r$   r%   r6     s   

zMultiDict._merge_itemsc                 C   s"   t }|d  d7  < |d | _ d S )Nr   r   )r`   )r2   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 r1   r$   r   r$   r$   r%   r   6  r!  z%MultiDict._resize.<locals>.<listcomp>)rT   r   rI   r   r   r   r   r   )r2   r8  r   ZoldkeysZ
newentriesr   Z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rT   r   r  r   r   r   r   r   rS   rI   r   r   rn   r  r2   r   r  rZ   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}   r9  r:  r$   r$   r%   r5  G  s    z MultiDict._add_with_hash_for_updrZ   r[   c                 C   s*   d | j j|< d| j j|< |  jd8  _d S )Nr   r   )rT   r   r   r   )r2   rZ   r[   r$   r$   r%   r&  S  s   zMultiDict._del_atc                 C   s   d |_ d |_d S r1   r  )r2   r   r$   r$   r%   r4  X  r4   zMultiDict._del_at_for_updr1   )rC   rD   r5   N)r5   N)Jr   r   r    r!   r@   r   r&   r3   r   r   r"   rP   r   r'   r   r)   r(   r   r  r  r   r7   rA   rJ   r   r  r   r	  r   r  r   r   r  r]   r   r   rt   r   r   r   r   rO   r   r   r  ry   r  r   r  r   r   r   r   r   r%  r(  r)  r*  r+  r
   r-  r,  r.  r   r0  r1  r7  r6  r  r  r  r5  r&  r4  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%   r;  ]  s    r;  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.rE   rF   ru   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 )rN   r   r   rR   r   rF   r2   ru   r$   r$   r%   r3   h  s   

zMultiDictProxy.__init__r5   c                 C   s   t d| jj d)Nzcan't pickle z objects)rR   rp   r   r6   r$   r$   r%   r  r  r  zMultiDictProxy.__reduce__rX   c                 C   r   r1   r$   r   r$   r$   r%   r   u  r8   zMultiDictProxy.getallr   c                 C   r   r1   r$   r   r$   r$   r%   r   w  r8   c                 C   "   |t ur| j||S | j|S )r   )r)   rF   r   r   r$   r$   r%   r   y  s   c                 C   r   r1   r$   r   r$   r$   r%   r     r8   zMultiDictProxy.getonec                 C   r   r1   r$   r   r$   r$   r%   r     r8   c                 C   r=  )r   )r)   rF   r   r   r$   r$   r%   r     s   c                 C   r   r1   r   r   r$   r$   r%   r    r<   zMultiDictProxy.__getitem__Nc                C   r   r1   r$   r   r$   r$   r%   r    r8   zMultiDictProxy.getc                C   r   r1   r$   r   r$   r$   r%   r    r8   c                 C   s   | j ||S r  )rF   r   r   r$   r$   r%   r    s   c                 C   s   t | j S r1   )r~   rF   r  r6   r$   r$   r%   r7     s   zMultiDictProxy.__iter__c                 C   r9   r1   rH   r6   r$   r$   r%   rJ     r<   zMultiDictProxy.__len__c                 C   
   | j  S r  )rF   r  r6   r$   r$   r%   r    r   zMultiDictProxy.keysc                 C   r>  r  )rF   r	  r6   r$   r$   r%   r	    r   zMultiDictProxy.itemsc                 C   r>  r
  )rF   r  r6   r$   r$   r%   r    r   zMultiDictProxy.valuesr|   c                 C   s
   | j |kS r1   rE   )r2   r|   r$   r$   r%   r    r<   zMultiDictProxy.__eq__c                 C   s
   || j v S r1   rE   r   r$   r$   r%   r]     r<   zMultiDictProxy.__contains__c                 C   s.   d dd |  D }d| jj d| dS )Nrj   c                 s   s$    | ]\}}d | d|V  qdS r  r$   )r   r  r   r$   r$   r%   r     r  z*MultiDictProxy.__repr__.<locals>.<genexpr>rk   rl   rm   )ro   r	  rp   r   r  r$   r$   r%   rt     s   zMultiDictProxy.__repr__c                 C   r9   r  )r   rF   r6   r$   r$   r%   r    r   zMultiDictProxy.copyr1   )(r   r   r    r!   r@   r   r&   r#   r   r3   r   r  r   r"   rP   r   r'   r)   r(   r   r  r  r   r7   rA   rJ   r   r  r   r	  r   r  r   r   r  r]   r   r   rt   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.ru   c                    s0   t |ttfstdt| t | d S )Nz<ctor requires CIMultiDict or CIMultiDictProxy instance, not )rN   r;  r?  rR   r   superr3   r<  r  r$   r%   r3     s   zCIMultiDictProxy.__init__r5   c                 C   r9   r  )r;  rF   r6   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?  rC   c                 C   s.   t | tr| j} | jS t | tstd| jS )Nz&Parameter should be multidict or proxy)rN   r   rF   r   rR   r`   )rC   r$   r$   r%   
getversion  s   

rB  ):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   Ztyping_extensionsr"   r   r&   r'   Enumr(   r)   r`   r+   rB   rK   r   r   r   r   rA   r   r   r   r   r;  r   r?  r   rB  r$   r$   r$   r%   <module>   sR     0
 4     yc&