a
    h                     @   sT  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rd 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/e0e0d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# Z7ee4e8 e6e8 f e0d.d/d0Z9dS )1    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$   \/var/www/html/swiplay.fr/scambot/venv/lib/python3.9/site-packages/multidict/_multidict_py.pyr   $   s   
r   _V_T	_SENTINELsentinelQc                   @   sN   e Zd ZdZeee dddZedddZ	eddd	Z
edd
dZdS )_Iter_size_iter)sizeiteratorc                 C   s   || _ || _d S Nr,   )selfr/   r0   r$   r$   r%   __init__7   s    z_Iter.__init__returnc                 C   s   | S r1   r$   r2   r$   r$   r%   __iter__;   s    z_Iter.__iter__c                 C   s
   t | jS r1   )nextr.   r6   r$   r$   r%   __next__>   s    z_Iter.__next__c                 C   s   | j S r1   )r-   r6   r$   r$   r%   __length_hint__A   s    z_Iter.__length_hint__N)r   r   r    	__slots__intr   r'   r3   r   r7   r9   r:   r$   r$   r$   r%   r+   4   s
   r+   c                   @   s(   e Zd ZddddZedddZdS )		_ViewBaseMultiDict[_V]mdc                 C   s
   || _ d S r1   _mdr2   r@   r$   r$   r%   r3   F   s    z_ViewBase.__init__r4   c                 C   s
   t | jS r1   lenrB   r6   r$   r$   r%   __len__L   s    z_ViewBase.__len__N)r   r   r    r3   r<   rF   r$   r$   r$   r%   r=   E   s   r=   c                   @   s  e Zd ZeedddZeeee	f  dddZ
eeeee	f  ddd	Ze edd
dZeeee	f ef eeeeee	f  dddZee eeee	f  dddZee eeee	f  dddZee ee dddZee eeeee	f ef  dddZee eeeee	f ef  dddZee eeeee	f ef  dddZee ee dddZee eeeee	f ef  ddd ZeZ eeee	f  ed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yJ   Y dS 0 t|}| jj	|D ]$\}}}|j
|krb||jkrb dS qbdS )N   FT)
isinstancetuplelistrE   rB   	_identity	TypeErrorhash_keys	iter_hashidentityvalue)	r2   rH   keyrS   rR   hash_slotidxer$   r$   r%   __contains__Q   s    z_ItemsView.__contains__r4   c                 C   s   t t| | | jjS r1   r+   rE   r.   rB   _versionr6   r$   r$   r%   r7   _   s    z_ItemsView.__iter__versionr5   c                 c   s@   | j j D ].}|| j jkr$td| j |j|jfV  qd S Nz#Dictionary changed during iteration)rB   rP   iter_entriesr[   RuntimeError_keyrT   rS   r2   r]   rX   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'': , <()>)	rB   rP   r_   appendrT   rS   join	__class__r   r2   lstrX   bodyr$   r$   r%   __repr__h   s
    
z_ItemsView.__repr__)argr5   c                 C   sb   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 0 d S )NrI   r   r   )rJ   rK   rE   rB   rM   rO   rN   )r2   rp   rR   r$   r$   r%   _parse_itemp   s    
z_ItemsView._parse_item)itr5   c                 C   s@   t  }|D ]0}| |}|d u r$q
q
||d |d f q
|S )Nr   r   )setrq   add)r2   rr   tmprp   rH   r$   r$   r%   _tmp_set}   s    
z_ItemsView._tmp_setotherr5   c                 C   s   t  }zt|}W n ty(   t Y S 0 |D ]x}| |}|d u rFq.|\}}}}	| jj|D ]6\}
}}d|_|j	|kr`|j
|	kr`||j|j
f q`| jj| q.|S )N)rs   iterrN   NotImplementedrq   rB   rP   rQ   rO   rR   rS   rt   rT   restore_hashr2   rx   retrr   rp   rH   rU   rR   rT   rS   rV   rW   rX   r$   r$   r%   __and__   s     

z_ItemsView.__and__c                 C   s   t  }zt|}W n ty(   t Y S 0 |D ]`}| |}|d u rFq.|\}}}}	| jj|D ],\}
}}|j|kr`|j	|	kr`|
|  q.q`q.|S r1   )rs   rz   rN   r{   rq   rB   rP   rQ   rR   rS   rt   r}   r$   r$   r%   __rand__   s    


z_ItemsView.__rand__c                 C   s   t | }zt|}W n ty*   t Y S 0 |D ]j}| |}|d u rR|| q0|\}}}}	| jj|D ]"\}
}}|j	|krl|j
|	krl q0ql|| q0|S r1   rs   rz   rN   r{   rq   rt   rB   rP   rQ   rR   rS   r}   r$   r$   r%   __or__   s     


z_ItemsView.__or__c                 C   sf   zt |}W n ty"   t Y S 0 | |}| jj D ]&}|j|jf|vr:|	|j
|jf q:|S r1   )rs   rN   r{   rv   rB   rP   r_   rR   rS   rt   rT   )r2   rx   r~   ru   rX   r$   r$   r%   __ror__   s    

z_ItemsView.__ror__c                 C   sl   t  }zt|}W n ty(   t Y S 0 | |}| jj D ]&}|j|j	f|vr@|
|j|j	f q@|S r1   )rs   rz   rN   r{   rv   rB   rP   r_   rR   rS   rt   rT   )r2   rx   r~   rr   ru   rX   r$   r$   r%   __sub__   s    

z_ItemsView.__sub__c                 C   s   t  }zt|}W n ty(   t Y S 0 |D ]j}| |}|d u rP|| q.|\}}}}	| jj|D ]"\}
}}|j	|krj|j
|	krj q.qj|| q.|S r1   r   r}   r$   r$   r%   __rsub__   s     


z_ItemsView.__rsub__c                 C   s<   zt |}W n ty"   t Y S 0 | | }|||  O }|S r1   rs   rN   r{   r2   rx   Zrgtr~   r$   r$   r%   __xor__   s    
z_ItemsView.__xor__c                 C   sd   |D ]Z}|  |}|d u rq|\}}}}| jj|D ]&\}}	}
|
j|kr6|
j|kr6  dS q6qdS NFT)rq   rB   rP   rQ   rR   rS   )r2   rx   rp   rH   rU   rR   rT   rS   rV   rW   rX   r$   r$   r%   
isdisjoint   s    
z_ItemsView.isdisjointN)"r   r   r    objectboolrY   r+   rK   r"   r&   r7   r<   r   r.   reprlibrecursive_reprro   r   r'   r   rq   r   rs   rv   r   r   r   r   r   r   r   r   __rxor__r   r$   r$   r$   r%   rG   P   s$    
 ((((	rG   c                   @   sX   e Zd ZeedddZee dddZe	e
e ddd	Ze edd
dZdS )_ValuesView)rS   r5   c                 C   s&   | j j D ]}|j|kr dS qdS )NTF)rB   rP   r_   rS   )r2   rS   rX   r$   r$   r%   rY     s    
z_ValuesView.__contains__r4   c                 C   s   t t| | | jjS r1   rZ   r6   r$   r$   r%   r7   
  s    z_ValuesView.__iter__r\   c                 c   s2   | j j D ] }|| j jkr$td|jV  qd S r^   )rB   rP   r_   r[   r`   rS   rb   r$   r$   r%   r.     s    z_ValuesView._iterc                 C   sF   g }| j j D ]}|t|j qd|}d| jj d| dS )Nre   rf   rg   rh   )	rB   rP   r_   ri   reprrS   rj   rk   r   rl   r$   r$   r%   ro     s
    
z_ValuesView.__repr__N)r   r   r    r   r   rY   r+   r&   r7   r<   r   r.   r   r   r"   ro   r$   r$   r$   r%   r     s
   r   c                   @   s(  e Zd ZeedddZee dddZe	e
e ddd	Zedd
dZee ee dddZee ee dddZee eeeef  dddZee eeeef  dddZee ee dddZee ee dddZee eeeef  dddZeZee edddZdS )	_KeysViewrT   r5   c                 C   sP   t |tsdS | j|}t|}| jj|D ]\}}}|j|kr0 dS q0dS r   )rJ   r"   rB   rM   rO   rP   rQ   rR   r2   rT   rR   rU   rV   rW   rX   r$   r$   r%   rY     s    

z_KeysView.__contains__r4   c                 C   s   t t| | | jjS r1   rZ   r6   r$   r$   r%   r7   '  s    z_KeysView.__iter__r\   c                 c   s:   | j j D ](}|| j jkr$td| j |jV  qd S r^   )rB   rP   r_   r[   r`   ra   rT   rb   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 )Nrc   re   rf   rg   rh   )rB   rP   r_   ri   rT   rj   rk   r   rl   r$   r$   r%   ro   0  s
    
z_KeysView.__repr__rw   c           
      C   s   t  }zt|}W n ty(   t Y S 0 |D ]X}t|ts>q.| j|}t|}| jj	
|D ]$\}}}	|	j|kr`||	j  q.q`q.|S r1   )rs   rz   rN   r{   rJ   r"   rB   rM   rO   rP   rQ   rR   rt   rT   
r2   rx   r~   rr   rT   rR   rU   rV   rW   rX   r$   r$   r%   r   7  s    


z_KeysView.__and__c                 C   sb   t  }zt|}W n ty(   t Y S 0 |D ]$}t|ts>q.|| jv r.|| q.tt t	 |S r1   )
rs   rz   rN   r{   rJ   r"   rB   rt   r   r'   r2   rx   r~   rr   rT   r$   r$   r%   r   H  s    


z_KeysView.__rand__c                 C   sd   t | }zt|}W n ty*   t Y S 0 |D ].}t|tsJ|| q0|| jvr0|| q0|S r1   )rs   rz   rN   r{   rJ   r"   rt   rB   r   r$   r$   r%   r   U  s    



z_KeysView.__or__c                 C   s   zt |}W n ty"   t Y S 0 t  }|D ]&}t|ts>q.| j|}|| q.| jj	 D ]}|j
|vrb||j qb|S r1   )rs   rN   r{   rJ   r"   rB   rM   rt   rP   r_   rR   rT   )r2   rx   r~   ru   rT   rR   rX   r$   r$   r%   r   c  s    


z_KeysView.__ror__c           
      C   s   t | }zt|}W n ty*   t Y S 0 |D ]X}t|ts@q0| j|}t|}| jj	
|D ]$\}}}	|	j|krb||	j  q0qbq0|S r1   )rs   rz   rN   r{   rJ   r"   rB   rM   rO   rP   rQ   rR   discardrT   r   r$   r$   r%   r   u  s    


z_KeysView.__sub__c                 C   sR   zt |}W n ty"   t Y S 0 |D ]$}t|ts8q(|| jv r(|| q(|S r1   )rs   rN   r{   rJ   r"   rB   r   )r2   rx   r~   rT   r$   r$   r%   r     s    


z_KeysView.__rsub__c                 C   s<   zt |}W n ty"   t Y S 0 | | }|||  O }|S r1   r   r   r$   r$   r%   r     s    
z_KeysView.__xor__c                 C   s*   |D ] }t |tsq|| jv r dS qdS r   )rJ   r"   rB   )r2   rx   rT   r$   r$   r%   r     s    

z_KeysView.isdisjointN)r   r   r    r   r   rY   r+   r"   r7   r<   r   r.   ro   r   rs   r   r'   r   r   r   r   r   r   r   r   r   r$   r$   r$   r%   r     s   
   	r   c                   @   s>   e Zd ZU dZee ed< eedddZeedddZ	dS )	_CSMixinF_cir   c                 C   s   |S r1   r$   r2   rT   r$   r$   r%   ra     s    z_CSMixin._keyc                 C   s   t |tr|S tdd S 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"   ra   rM   r$   r$   r$   r%   r     s   
r   c                   @   s>   e Zd ZU dZee ed< eedddZeedddZ	dS )	_CIMixinTr   r   c                 C   s   t |tu r|S t|S d S r1   )typer   r   r$   r$   r%   ra     s    z_CIMixin._keyc                 C   sH   t |tr*|j}|d u r&| }||_|S t |tr<| S tdd S r   )rJ   r   r   lowerr"   rN   )r2   rT   r~   r$   r$   r%   rM     s    

z_CIMixin._identityNr   r$   r$   r$   r%   r     s   
r   )nr5   c                 C   s   | d d d dB   S )Nr   r   rI      )
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 )_EntryrO   rR   rT   rS   N)r   r   r    r<   r#   r"   r&   r$   r$   r$   r%   r     s   
r   c                   @   sn  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edddZejedddZejjdkredddZeeeeee   edddZddddZeddddZeedd d!Zeee eeee f  dd"d#Z!eedd$d%d&Z"eee  dd'd(Z#edd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   s   | ]
}d V  qdS ry   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entriesr4   c                 C   s
   d| j > S Nr   )r   r6   r$   r$   r%   nslots  s    z_HtKeys.nslotsc                 C   s
   | j d S r   )r   r6   r$   r$   r%   mask  s    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__)r   r   r5   c                 C   s   d|> }|d> d }|dk r,| j |  }n\|dk rNtddd t|D }n:|dk rptd	d
d t|D }ntddd t|D }| ||||d}|S )Nr   r   r      r   c                 s   s   | ]
}d V  qdS r   r$   r   r$   r$   r%   r     r   z_HtKeys.new.<locals>.<genexpr>    lc                 s   s   | ]
}d V  qdS r   r$   r   r$   r$   r%   r     r   qc                 s   s   | ]
}d V  qdS 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.newz_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   rO   rR   rT   rS   r   rX   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.cloneN)updater5   c           	      C   s   | j }| j}t| jD ]\}}|d us*J |j}|rH|dkrTt|j}n|dksTJ ||@ }|tj@ }|| dkr|dL }||d | d @ }qf|||< qd S Nry      r   )r   r   	enumerater   rO   rR   r   maxsize)	r2   r   r   r   rW   rX   rU   r   perturbr$   r$   r%   build_indices  s    
z_HtKeys.build_indices)rU   r5   c                 C   sX   | j }| j}||@ }|tj@ }|| }|dkrT|dL }|d | d |@ }|| }q&|S r   r   r   r   r   )r2   rU   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r|dkrZ|| }|j|krZ|||fV  |dL }|d | d |@ }|| }q,d S Nry   r   r   r   r   r   r   r   rO   )	r2   rU   r   r   r   r   r   r   rX   r$   r$   r%   rQ   7  s    

z_HtKeys.iter_hash)rU   rW   r5   c                 C   s`   | j }| j}||@ }|tj@ }|| }||krT|dL }|d | d |@ }|| }q&d||< d S )Nr   r   r   r   )r2   rU   rW   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%   r_   S  s    z_HtKeys.iter_entriesc           	      C   s~   | j }| j}| j}||@ }|tj@ }|| }|dkrz|dkrT|| }|jdkrT||_|dL }|d | d |@ }|| }q,d S r   r   )	r2   rU   r   r   r   r   r   r   entryr$   r$   r%   r|   V  s    

z_HtKeys.restore_hash)%r   r   r    r   r   r<   r#   r   r   r   dictr   rL   r   r   r&   	functoolscached_propertyr   r   r   implementationnamer   classmethodr   r   r   r   r   r   r   rK   rQ   r   r_   r|   r$   r$   r$   r%   r     s0   
 "r   c                   @   s  e Zd ZdZdZdoee edddZdddd	d
Ze	e
ee dddZe	e
eeee ef dddZefe
eeef eee ef dddZe	e
edddZe	e
eeeef dddZefe
eeef eeef dddZe
edddZe	e
eedf dddZe	ee
eeef dddZdpe
eedf eeedf dddZee
 dddZeddd Zee
 dd!d"Zee
ef dd#d$Zee dd%d&Zeed'd(d)Z eedd*d+Z!e"# e
dd,d-Z$e%j&j'd.kredd/d0Z(e)e*e+ e)ee)e
ef   f dd1d2Z,e
edd3d4d5Z-e+dd6d7Z.e.Z/dqee edd8d9d:Z0ee e1e
ef eeee2e f  d8d;d<Z3e4e2e  dd=d>d?Z5ddd@dAZ6e
edd3dBdCZ7e
dddDdEZ8e	drdFe
deedf dGdHdIZ9e	e
eeddJdIZ9dse
eedf eedf ddKdIZ9e	e
eddLdMZ:e	e
eeeef ddNdMZ:efe
eeef eeef ddOdMZ:e;se:Z<e	e
ee ddPdQZ=e	e
eeee ef ddRdQZ=efe
eeef eee ef ddSdQZ=e)e
ef ddTdUZ>dtee edd8dVdWZ?ee2e  dd=dXdYZ@dddZd[ZAduee edd8d\d]ZBee2e  dd=d^d_ZCddd`daZDeeddbdcddZEe2e ddedfdgZFe2e ddedhdiZGeeddjdkdlZHe2e ddedmdnZIdS )v	MultiDictz/Dictionary with the support for duplicate keys.)rP   _usedr[   N)rp   kwargsc                K   s   d| _ t}|d  d7  < |d | _|snd }t|tr>|j}nt|trL|}|d urn|j| ju rn| | d S | ||}t	t
tt|}|dkrd}t|g | _| t
ttt  | d S )Nr   r      )r   r[   rJ   MultiDictProxyrB   r   r   _from_md_parse_argsr   r   r<   r8   r   r   rP   _extend_itemsr   r   r&   )r2   rp   r   vr@   rr   r   r$   r$   r%   r3   l  s&    



zMultiDict.__init__r>   r@   r5   c                 C   s   |j  | _ |j| _d S r1   )rP   r   r   rC   r$   r$   r%   r     s    zMultiDict._from_mdr   c                 C   s   d S r1   r$   r   r$   r$   r%   getall  s    zMultiDict.getallrT   defaultr5   c                 C   s   d S r1   r$   r2   rT   r   r$   r$   r%   r     s    c                 C   s   |  |}t|}g }g }| j|D ]0\}}}	|	j|kr&||	j d|	_|| q&|r|| jj}
|D ]}||
| _qh|S |s|tur|S t	d| dS )-Return a list of all values matching the key.ry   Key not found: %rN)
rM   rO   rP   rQ   rR   ri   rS   r   r)   KeyError)r2   rT   r   rR   rU   resrestorerV   rW   rX   r   r$   r$   r%   r     s"    

c                 C   s   d S r1   r$   r   r$   r$   r%   getone  s    zMultiDict.getonec                 C   s   d S r1   r$   r   r$   r$   r%   r     s    c                 C   sZ   |  |}t|}| j|D ]\}}}|j|kr|j  S q|turJ|S td| dS )wGet first value matching the key.

        Raises KeyError if the key is not found and no default is provided.
        r   N)rM   rO   rP   rQ   rR   rS   r)   r   r2   rT   r   rR   rU   rV   rW   rX   r$   r$   r%   r     s    

c                 C   s
   |  |S r1   r   r   r$   r$   r%   __getitem__  s    zMultiDict.__getitem__c                C   s   d S r1   r$   r   r$   r$   r%   get  s    zMultiDict.getr   rT   r5   c                C   s   d S r1   r$   r   r$   r$   r%   r     s    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    r4   c                 C   s   t |  S r1   )rz   keysr6   r$   r$   r%   r7     s    zMultiDict.__iter__c                 C   s   | j S r1   )r   r6   r$   r$   r%   rF     s    zMultiDict.__len__c                 C   s   t | S z+Return a new view of the dictionary's keys.)r   r6   r$   r$   r%   r     s    zMultiDict.keysc                 C   s   t | S zAReturn a new view of the dictionary's items *(key, value) pairs).)rG   r6   r$   r$   r%   items  s    zMultiDict.itemsc                 C   s   t | S z-Return a new view of the dictionary's values.)r   r6   r$   r$   r%   values  s    zMultiDict.valuesrw   c           	      C   s   t |tstS t |tr"| |jkS t |tr| j}|j}| j|jkrHdS t|	 |	 D ]&\}}|j
|j
ksz|j|jkrZ dS qZdS | jt|krdS |  D ]"\}}||t}||kr dS qdS r   )rJ   r   r{   r   rB   r   rP   r   zipr_   rR   rS   rE   r   r   r)   )	r2   rx   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   )rJ   r"   rM   rO   rP   rQ   rR   r   r$   r$   r%   rY     s    


zMultiDict.__contains__c                 C   s0   d dd | j D }d| jj d| dS )Nre   c                 s   s"   | ]}d |j  d|jV  qdS rc   rd   NrT   rS   r   r$   r$   r%   r     r   z%MultiDict.__repr__.<locals>.<genexpr>rf   rg   rh   )rj   rP   r_   rk   r   r2   rn   r$   r$   r%   ro     s    zMultiDict.__repr__r   c                 C   s   t | t| j S r1   )r   r   r   r   rP   r6   r$   r$   r%   r     s    zMultiDict.__sizeof__c                 C   s   | j t|  ffS r1   )rk   rL   r   r6   r$   r$   r%   
__reduce__  s    zMultiDict.__reduce__)rT   rS   r5   c                 C   s2   |  |}t|}| t|||| |   d S r1   )rM   rO   _add_with_hashr   _incr_version)r2   rT   rS   rR   rU   r$   r$   r%   rt     s    
zMultiDict.addc                 C   s   | j }|| S zReturn a copy of itself.rk   )r2   r   r$   r$   r%   copy  s    zMultiDict.copy)rp   r   r5   c                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   r<   r8   _resizer   r   r   r   r&   )r2   rp   r   rr   newsizer$   r$   r%   extend  s    zMultiDict.extendc           
      #   s  | j } rt tr j t trt t| V  | j jurx j D ]&}||j	}t
t|||j	|jV  qNn( j D ]}t
|j|j|j	|jV  q|r| D ]$\}}||}t
t||||V  qnt drttt    fdd  D  |r$t   t|  zt t| V  W n tyT   dV  Y n0 t D ]Z\}}	t|	dkstd| dt|	 d||	d }t
t|||	d |	d	 V  q^n:t|V  | D ]&\}}||}t
t||||V  qd S )
Nr   c                    s   g | ]}| | fqS r$   r$   )r   r  rp   r$   r%   r   7  r   z)MultiDict._parse_args.<locals>.<listcomp>r   rI   z#multidict update sequence element #zhas length z; 2 is requiredr   )rM   rJ   r   rB   r   rE   r   rP   r_   rT   r   rO   rS   rR   r   hasattrr   r   r&   r   rL   r  rN   r   
ValueError)
r2   rp   r   Zidentity_funcrX   rR   rT   rS   posrH   r$   r  r%   r     sN    


"
zMultiDict._parse_args)r   r5   c                 C   s    |D ]}|  | q|   d S r1   )r  r  )r2   r   rX   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   rP   r  r6   r$   r$   r%   clearR  s    zMultiDict.clearc           	      C   s   |  |}t|}d}| j|D ]N\}}}|j|kr"|sZ||_||_d|_d}|   q"|jdkr"| || q"|s| 	t
|||| n| j| d S )NFry   T)rM   rO   rP   rQ   rR   rT   rS   r  _del_atr  r   r|   )	r2   rT   rS   rR   rU   foundrV   rW   rX   r$   r$   r%   __setitem__Z  s     



zMultiDict.__setitem__c                 C   sb   d}|  |}t|}| j|D ]$\}}}|j|kr"| || d}q"|sVt|n|   d S r   )rM   rO   rP   rQ   rR   r  r   r  )r2   rT   r  rR   rU   rV   rW   rX   r$   r$   r%   __delitem__o  s    


zMultiDict.__delitem__zMultiDict[Union[_T, None]])r2   rT   r   r5   c                 C   s   d S r1   r$   r   r$   r$   r%   
setdefault|  s    zMultiDict.setdefaultc                 C   s   d S r1   r$   r   r$   r$   r%   r    s    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.)rM   rO   rP   rQ   rR   rS   rt   r   r$   r$   r%   r    s    

c                 C   s   d S r1   r$   r   r$   r$   r%   popone  s    zMultiDict.poponec                 C   s   d S r1   r$   r   r$   r$   r%   r    s    c           	      C   sp   |  |}t|}| j|D ]6\}}}|j|kr|j}| || |   |  S q|tu rht	|n|S dS )zRemove specified key and return the corresponding value.

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

        N)
rM   rO   rP   rQ   rR   rS   r  r  r)   r   )	r2   rT   r   rR   rU   rV   rW   rX   rS   r$   r$   r%   r    s    	



c                 C   s   d S r1   r$   r   r$   r$   r%   popall  s    zMultiDict.popallc                 C   s   d S r1   r$   r   r$   r$   r%   r    s    c           
      C   s   d}|  |}t|}g }| j|D ]8\}}}	|	j|kr&d}||	j | || |   q&|s||t	u rvt
|q|S n|S d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.

        FTN)rM   rO   rP   rQ   rR   ri   rS   r  r  r)   r   )
r2   rT   r   r  rR   rU   r~   rV   rW   rX   r$   r$   r%   r    s    




c                 C   s   | j dkrtdt| jjd }| jj }|du rL|d8 }| jj }q.| |j|jf}| j	|j
| |  j d8  _ |   |S )z1Remove and return an arbitrary (key, value) pair.r   zempty multidictr   N)r   r   rE   rP   r   popra   rT   rS   r   rO   r  )r2   r  r   r~   r$   r$   r%   popitem  s    
zMultiDict.popitemc                K   s   |  ||}| jttt| }t|}|dkr4d}|| jjkrL| |d z$| 	tt
tt  | W |   n
|   0 dS )z1Update the dictionary, overwriting existing keys.r   FN)r   r   r   r<   r8   r   rP   r   r  _update_itemsr   r   r&   _post_updater2   rp   r   rr   r  r   r$   r$   r%   r     s    zMultiDict.updatec           	      C   sx   |D ]n}d}|j }|j}| j|D ]>\}}}|j|kr$|sXd}|j|_|j|_d|_ q$| | q$|s| | qd S )NFTry   )rO   rR   rP   rQ   rT   rS   _del_at_for_upd_add_with_hash_for_upd)	r2   r   r   r  rU   rR   rV   rW   rX   r$   r$   r%   r"    s    
zMultiDict._update_itemsc                 C   s   | j }|j}|j}t|jD ]f}|| }|dkr|| }|d usDJ |jd u rld ||< d||< |  jd8  _|jdkrt|j|_q| 	  d S )Nr   r   r   ry   )
rP   r   r   r   r   rT   r   rO   rR   r  )r2   r   r   r   rV   rW   r  r$   r$   r%   r#    s    

zMultiDict._post_updatec                K   s   |  ||}| jttt| }t|}|dkr4d}|| jjkrL| |d z$| 	tt
tt  | W |   n
|   0 dS )z4Merge into the dictionary, adding non-existing keys.r   FN)r   r   r   r<   r8   r   rP   r   r  _merge_itemsr   r   r&   r#  r$  r$   r$   r%   merge  s    zMultiDict.mergec                 C   sJ   |D ]@}|j }|j}| j|D ]\}}}|j|kr  qq | | qd S r1   )rO   rR   rP   rQ   r&  )r2   r   r   rU   rR   rV   rW   rX   r$   r$   r%   r'     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   r5   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>)rP   r   rE   r   r   r   r   r   )r2   r)  r   ZoldkeysZ
newentriesr   Znewkeysr$   r$   r%   r  /  s    
zMultiDict._resize)r   r5   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rP   r   r  r   r   r   r   r   rO   rE   r   r   ri   r  r2   r   r   rV   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   Try   r*  r+  r$   r$   r%   r&  G  s     z MultiDict._add_with_hash_for_upd)rV   rW   r5   c                 C   s*   d | j j|< d| j j|< |  jd8  _d S )Nr   r   )rP   r   r   r   )r2   rV   rW   r$   r$   r%   r  S  s    zMultiDict._del_atc                 C   s   d |_ d |_d S r1   r	  )r2   r   r$   r$   r%   r%  X  s    zMultiDict._del_at_for_upd)N)N)N)N)N)N)N)Jr   r   r    r!   r;   r   r&   r3   r   r   r"   rL   r   r'   r   r)   r(   r   r   r   r   r7   r<   rF   r   r   r   r   r   r  r   r   r  rY   r   r   ro   r   r   r   r   rK   r   r   r  rt   r  r   r  r   r   r   r   r   r  r  r  r  r  r
   r   r  r!  r   r"  r#  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%   r,  ]  s   r,  c                   @   s  e Zd ZU dZdZee ed< eee df dddZ	e
dd	d
Zeeee dddZeeeeee ef dddZefeeeef eee ef dddZeeedddZeeeeeef dddZefeeeef eeef dddZeedddZeeeedf dddZeeeeeef dddZd0eeedf eeedf dddZee dddZeddd Zee dd!d"Zeeef dd#d$Zee dd%d&Ze e!d'd(d)Z"e e!dd*d+Z#e$% edd,d-Z&ee dd.d/Z'dS )1r   z'Read-only proxy for MultiDict instance.rA   rB   zMultiDictProxy[_V]r  c                 C   s>   t |ttfs tdt| t |tr4|j| _n|| _d S )Nz8ctor requires MultiDict or MultiDictProxy instance, not )rJ   r   r   rN   r   rB   r2   rp   r$   r$   r%   r3   h  s    

zMultiDictProxy.__init__r4   c                 C   s   t d| jj dd S )Nzcan't pickle z objects)rN   rk   r   r6   r$   r$   r%   r  r  s    zMultiDictProxy.__reduce__r   c                 C   s   d S r1   r$   r   r$   r$   r%   r   u  s    zMultiDictProxy.getallr   c                 C   s   d S r1   r$   r   r$   r$   r%   r   w  s    c                 C   s&   |t ur| j||S | j|S dS )r   N)r)   rB   r   r   r$   r$   r%   r   y  s    c                 C   s   d S r1   r$   r   r$   r$   r%   r     s    zMultiDictProxy.getonec                 C   s   d S r1   r$   r   r$   r$   r%   r     s    c                 C   s&   |t ur| j||S | j|S dS )r   N)r)   rB   r   r   r$   r$   r%   r     s    c                 C   s
   |  |S r1   r   r   r$   r$   r%   r     s    zMultiDictProxy.__getitem__Nc                C   s   d S r1   r$   r   r$   r$   r%   r     s    zMultiDictProxy.getr   c                C   s   d S r1   r$   r   r$   r$   r%   r     s    c                 C   s   | j ||S r   )rB   r   r   r$   r$   r%   r     s    c                 C   s   t | j S r1   )rz   rB   r   r6   r$   r$   r%   r7     s    zMultiDictProxy.__iter__c                 C   s
   t | jS r1   rD   r6   r$   r$   r%   rF     s    zMultiDictProxy.__len__c                 C   s
   | j  S r   )rB   r   r6   r$   r$   r%   r     s    zMultiDictProxy.keysc                 C   s
   | j  S r   )rB   r   r6   r$   r$   r%   r     s    zMultiDictProxy.itemsc                 C   s
   | j  S r   )rB   r  r6   r$   r$   r%   r    s    zMultiDictProxy.valuesrw   c                 C   s
   | j |kS r1   rA   )r2   rx   r$   r$   r%   r    s    zMultiDictProxy.__eq__c                 C   s
   || j v S r1   rA   r   r$   r$   r%   rY     s    zMultiDictProxy.__contains__c                 C   s.   d dd |  D }d| jj d| dS )Nre   c                 s   s"   | ]\}}d | d|V  qdS r  r$   )r   r  r   r$   r$   r%   r     r   z*MultiDictProxy.__repr__.<locals>.<genexpr>rf   rg   rh   )rj   r   rk   r   r
  r$   r$   r%   ro     s    zMultiDictProxy.__repr__c                 C   s
   t | jS r  )r   rB   r6   r$   r$   r%   r    s    zMultiDictProxy.copy)N)(r   r   r    r!   r;   r   r&   r#   r   r3   r   r  r   r"   rL   r   r'   r)   r(   r   r   r   r   r7   r<   rF   r   r   r   r   r   r  r   r   r  rY   r   r   ro   r  r$   r$   r$   r%   r   a  sN   

 	
&r   c                       sH   e Zd ZdZeee ee f d fddZe	e dddZ
  ZS )CIMultiDictProxyz)Read-only proxy for CIMultiDict instance.r  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   r-  r  r$   r%   r3     s    zCIMultiDictProxy.__init__r4   c                 C   s
   t | jS r  )r,  rB   r6   r$   r$   r%   r    s    zCIMultiDictProxy.copy)r   r   r    r!   r   r   r&   r   r3   r,  r  __classcell__r$   r$   r  r%   r.    s   "	r.  r   c                 C   s*   t | tr| j} nt | ts$td| jS )Nz&Parameter should be multidict or proxy)rJ   r   rB   r   rN   r[   r?   r$   r$   r%   
getversion  s
    

r1  ):enumr   r   r   r   collections.abcr   r   r   r   r   r   Z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+   r=   rG   r   r   r   r   r<   r   r   r   r   r,  r   r.  r   r1  r$   r$   r$   r%   <module>   sP    0
 4     yc