o
    @gE                     @   s  d dl Z d dlZd dlmZ d dlmZmZmZmZmZm	Z	m
Z
 d dlmZmZmZmZmZmZmZ ddlmZmZmZmZ ejdkrJd 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a"G dd dee 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ee Z)G dd de)e ee Z*G d d! d!e*e Z+G d"d# d#e)e Z,G d$d% d%e,e Z-d&ee*e. e,e. f d'e/fd(d)Z0dS )*    N)array)Callable	ItemsViewIterableIteratorKeysViewMapping
ValuesView)TYPE_CHECKINGGenericNoReturnTypeVarUnioncastoverload   )MDArgMultiMappingMutableMultiMappingSupportsKeys)      )Selfc                   @   s   e Zd ZdZdZdS )istrzCase insensitive str.TN)__name__
__module____qualname____doc____is_istr__ r   r   ^/var/www/html/development/chatbot/venv/lib/python3.10/site-packages/multidict/_multidict_py.pyr      s    r   _V_T	_SENTINELsentinelQc                   @   sB   e Zd ZdZdddZdddZejjdkrde	fd	d
Z
dS dS )_Impl)_items_versionreturnNc                 C   s   g | _ |   d S N)r'   incr_versionselfr   r   r    __init__1   s   z_Impl.__init__c                 C   s"   t }|d  d7  < |d | _ d S Nr   r   )r(   )r-   vr   r   r    r+   5   s   z_Impl.incr_versionpypyc                 C      t | t| j S r*   )object
__sizeof__sys	getsizeofr'   r,   r   r   r    r4   =      z_Impl.__sizeof__r)   N)r   r   r   	__slots__r.   r+   r5   implementationnameintr4   r   r   r   r    r&   .   s    

r&   c                   @   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 r*   r>   )r-   rA   rB   r   r   r    r.   D   s   
z_Iter.__init__r)   c                 C   s   | S r*   r   r,   r   r   r    __iter__H      z_Iter.__iter__c                 C   
   t | jS r*   )nextr@   r,   r   r   r    __next__K      
z_Iter.__next__c                 C   s   | j S r*   )r?   r,   r   r   r    __length_hint__N   s   z_Iter.__length_hint__N)r   r   r   r9   r<   r   r"   r.   r   rC   rG   rI   r   r   r   r    r=   A   s    r=   c                   @   s,   e Zd Zdee fddZdefddZdS )	_ViewBaseimplc                 C   s
   || _ d S r*   )_impl)r-   rK   r   r   r    r.   S   rH   z_ViewBase.__init__r)   c                 C      t | jjS r*   lenrL   r'   r,   r   r   r    __len__V      z_ViewBase.__len__N)r   r   r   r&   r!   r.   r<   rP   r   r   r   r    rJ   R   s    rJ   c                   @   sd   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defd
dZdS )
_ItemsViewitemr)   c                 C   sT   t |ttfrt|dkrdS | jjD ]\}}}|d |kr'|d |kr' dS qdS )N   Fr   r   T)
isinstancetuplelistrO   rL   r'   )r-   rS   ikr0   r   r   r    __contains__[   s   z_ItemsView.__contains__c                 C      t t| | | jjS r*   r=   rO   r@   rL   r(   r,   r   r   r    rC   c      z_ItemsView.__iter__versionc                 c   s8    | j jD ]\}}}|| j jkrtd||fV  qd S )N#Dictionary changed during iterationrL   r'   r(   RuntimeError)r-   r^   rX   rY   r0   r   r   r    r@   f   s   z_ItemsView._iterc                 C   sF   g }| j jD ]}|d|d |d  qd|}d| jj|S )Nz
{!r}: {!r}r   rT   , {}({})rL   r'   appendformatjoin	__class__r   r-   lstrS   bodyr   r   r    __repr__l   s
   
z_ItemsView.__repr__N)r   r   r   r3   boolrZ   r=   rV   strr!   rC   r<   r   r@   rl   r   r   r   r    rR   Z   s
    rR   c                   @   sT   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S )_ValuesViewvaluer)   c                 C   $   | j jD ]}|d |kr dS qdS )NrT   TFrL   r'   )r-   rp   rS   r   r   r    rZ   u   
   z_ValuesView.__contains__c                 C   r[   r*   r\   r,   r   r   r    rC   {   r]   z_ValuesView.__iter__r^   c                 c   2    | j jD ]}|| j jkrtd|d V  qd S )Nr_   rT   r`   r-   r^   rS   r   r   r    r@   ~      z_ValuesView._iterc                 C   @   g }| j jD ]}|d|d  qd|}d| jj|S )N{!r}rT   rb   rc   rd   ri   r   r   r    rl      
   
z_ValuesView.__repr__N)r   r   r   r3   rm   rZ   r=   r!   rC   r<   r   r@   rn   rl   r   r   r   r    ro   t   
    ro   c                   @   sT   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S )	_KeysViewkeyr)   c                 C   rq   )Nr   TFrr   )r-   r|   rS   r   r   r    rZ      rs   z_KeysView.__contains__c                 C   r[   r*   r\   r,   r   r   r    rC      r]   z_KeysView.__iter__r^   c                 c   rt   )Nr_   r   r`   ru   r   r   r    r@      rv   z_KeysView._iterc                 C   rw   )Nrx   r   rb   rc   rd   ri   r   r   r    rl      ry   z_KeysView.__repr__N)r   r   r   r3   rm   rZ   r=   rn   rC   r<   r   r@   rl   r   r   r   r    r{      rz   r{   c                
   @   s  e Zd ZU ee ed< dedefddZedede	e fddZ
edededee	e ef fd	dZ
efdedeeef dee	e ef fd
dZ
ededefddZedededeeef fddZefdedeeef deeef fddZdedefddZededeedf fddZedededeeef fddZ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defd%d&Z dS )(_BaserL   r|   r)   c                 C      |S r*   r   r-   r|   r   r   r    _title   rD   z_Base._titlec                 C      d S r*   r   r   r   r   r    getall   rD   z_Base.getalldefaultc                 C   r   r*   r   r-   r|   r   r   r   r    r      rD   c                    sD   |  |  fdd| jjD }|r|S |s|tur|S td| )z-Return a list of all values matching the key.c                    s   g | ]\}}}| kr|qS r   r   ).0rX   rY   r0   identityr   r    
<listcomp>   s    z _Base.getall.<locals>.<listcomp>Key not found: %rr   rL   r'   r$   KeyError)r-   r|   r   resr   r   r    r      s   
c                 C   r   r*   r   r   r   r   r    getone   rD   z_Base.getonec                 C   r   r*   r   r   r   r   r    r      rD   c                 C   sF   |  |}| jjD ]\}}}||kr|  S q	|tur|S td| )zwGet first value matching the key.

        Raises KeyError if the key is not found and no default is provided.
        r   r   r-   r|   r   r   rX   rY   r0   r   r   r    r      s   
c                 C   s
   |  |S r*   r   r   r   r   r    __getitem__   rH   z_Base.__getitem__Nc                C   r   r*   r   r   r   r   r    get   rD   z	_Base.getc                C   r   r*   r   r   r   r   r    r      rD   c                 C   s   |  ||S )zGet first value matching the key.

        If the key is not found, returns the default (or None if no default is provided)
        r   r   r   r   r    r      s   c                 C      t |  S r*   )iterkeysr,   r   r   r    rC      rQ   z_Base.__iter__c                 C   rM   r*   rN   r,   r   r   r    rP      rQ   z_Base.__len__c                 C   rE   )z+Return a new view of the dictionary's keys.)r{   rL   r,   r   r   r    r         
z
_Base.keysc                 C   rE   )zAReturn a new view of the dictionary's items *(key, value) pairs).)rR   rL   r,   r   r   r    items   r   z_Base.itemsc                 C   rE   )z-Return a new view of the dictionary's values.)ro   rL   r,   r   r   r    values   r   z_Base.valuesotherc                 C   s   t |tstS t |tr;| jj}|jj}t|t|krdS t||D ]\\}}}\}}}||ks5||kr8 dS q#dS t| jjt|krGdS |  D ]\}	}
|	|	t
}|
|kr\ dS qKdS NFT)rU   r   NotImplementedr}   rL   r'   rO   zipr   r   r$   )r-   r   lftrhti1k2v1i2v2rY   r0   nvr   r   r    __eq__   s(   

z_Base.__eq__c                 C   s>   t |tsdS | |}| jjD ]\}}}||kr dS qdS r   )rU   rn   r   rL   r'   )r-   r|   r   rX   rY   r0   r   r   r    rZ     s   

z_Base.__contains__c                 C   s(   d dd |  D }d| jj|S )Nrb   c                 s   s     | ]\}}d  ||V  qdS )z
'{}': {!r}N)rf   )r   rY   r0   r   r   r    	<genexpr>  s    z!_Base.__repr__.<locals>.<genexpr>z<{}({})>)rg   r   rf   rh   r   )r-   rk   r   r   r    rl     s   z_Base.__repr__r*   )!r   r   r   r&   r!   __annotations__rn   r   r   rW   r   r"   r   r$   r#   r   r   r   r   rC   r<   rP   r   r   r   r   ro   r   r3   rm   r   rZ   rl   r   r   r   r    r}      sR   
 $

 


 *	r}   c                   @   s  e Zd ZdZd=dee defddZejj	dkrde
fd	d
Zdeee eeeeef   f fddZdedefddZdedefddZdededdfddZdefddZeZd=dee deddfddZdee deeef dedeeeeeef  gdf ddf
ddZdeeeeef  ddfddZd>d d!Zdededdfd"d#Zdeddfd$d%Ze 	d=d&d'ded(dde!e"df fd)d*Z#e ded(edefd+d*Z#d=ded(e!edf de!ed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d0d.Z$e'se$Z(e dedee fd1d2Z)e ded(e"de!ee e"f fd3d2Z)e%fded(e!e"e&f de!ee e"f fd4d2Z)deeef fd5d6Z*d=dee deddfd7d8Z+deeeeef  ddfd9d:Z,dededdfd;d<Z-dS )?	MultiDictz/Dictionary with the support for duplicate keys.Nargkwargsc                K   s"   t  | _| ||| jj| j d S r*   )r&   rL   _extendrh   r   _extend_itemsr-   r   r   r   r   r    r.     s   zMultiDict.__init__r1   r)   c                 C   r2   r*   )r3   r4   r5   r6   rL   r,   r   r   r    r4     r7   zMultiDict.__sizeof__c                 C   s   | j t|  ffS r*   )rh   rW   r   r,   r   r   r    
__reduce__  s   zMultiDict.__reduce__r|   c                 C   r~   r*   r   r   r   r   r    r   !  rD   zMultiDict._titlec                 C   s   t |tr|S td)Nz8MultiDict keys should be either str or subclasses of str)rU   rn   	TypeErrorr   r   r   r    _key$  s   
zMultiDict._keyrp   c                 C   s2   |  |}| jj|| ||f | j  d S r*   )r   rL   r'   re   r   r+   )r-   r|   rp   r   r   r   r    add*  s   
zMultiDict.addc                 C   s   | j }||  S zReturn a copy of itself.)rh   r   )r-   clsr   r   r    copy/  s   zMultiDict.copyc                K      |  ||d| j dS )zhExtend current MultiDict with more values.

        This method must be used instead of update.
        extendN)r   r   r   r   r   r    r   6  s   zMultiDict.extendr;   methodc                    s    rdt  ttfr|s jj}nNt dr'ttt    fdd 	 D  |r6t
   t
|  g } D ]#}t|dksItd|||d |d |d f q:|| d S |fdd| D  d S )	Nr   c                    s   g | ]}| | fqS r   r   )r   rY   )r   r   r    r   J  s    z%MultiDict._extend.<locals>.<listcomp>rT   z3{} takes either dict or list of (key, value) tuplesr   r   c                    s&   g | ]\}}  | ||fqS r   )r   r   )r   r|   rp   r,   r   r    r   Z  s    )rU   r   MultiDictProxyrL   r'   hasattrr   r   r!   r   rW   r   r   rO   r   rf   re   r   r   )r-   r   r   r;   r   r   rS   r   )r   r-   r    r   =  s.   

*
zMultiDict._extendr   c                 C   s    |D ]\}}}|  || qd S r*   )r   )r-   r   r   r|   rp   r   r   r    r   `  s   zMultiDict._extend_itemsc                 C   s   | j j  | j   dS )z Remove all items from MultiDict.N)rL   r'   clearr+   r,   r   r   r    r   d  s   zMultiDict.clearc                 C   s   |  || d S r*   )_replace)r-   r|   rp   r   r   r    __setitem__k  s   zMultiDict.__setitem__c                 C   sd   |  |}| jj}d}tt|d ddD ]}|| d |kr$||= d}q|s+t|| j  d S )NFr   r   T)r   rL   r'   rangerO   r   r+   )r-   r|   r   r   foundrX   r   r   r    __delitem__n  s   
zMultiDict.__delitem__r-   zMultiDict[Union[_T, None]]r   c                 C   r   r*   r   r   r   r   r    
setdefault{  s   zMultiDict.setdefaultc                 C   r   r*   r   r   r   r   r    r     rD   c                 C   s>   |  |}| jjD ]\}}}||kr|  S q	| || |S )zAReturn value for key, set value to default if key is not present.)r   rL   r'   r   r   r   r   r    r     s   
c                 C   r   r*   r   r   r   r   r    popone  rD   zMultiDict.poponec                 C   r   r*   r   r   r   r   r    r     rD   c                 C   st   |  |}tt| jjD ]"}| jj| d |kr/| jj| d }| jj|= | j  |  S q|tu r8t||S )zRemove specified key and return the corresponding value.

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

        r   rT   )r   r   rO   rL   r'   r+   r$   r   )r-   r|   r   r   rX   rp   r   r   r    r     s   
	

c                 C   r   r*   r   r   r   r   r    popall  rD   zMultiDict.popallc                 C   r   r*   r   r   r   r   r    r     rD   c                 C   s   d}|  |}g }tt| jjd ddD ]!}| jj| }|d |kr6||d  | jj|= | j  d}q|sC|tu rAt||S |	  |S )zRemove all occurrences of key and return the list of corresponding
        values.

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

        Fr   r   r   rT   T)
r   r   rO   rL   r'   re   r+   r$   r   reverse)r-   r|   r   r   r   retrX   rS   r   r   r    r     s"   



c                 C   s8   | j jr| j jd}| j   |d |d fS td)z1Remove and return an arbitrary (key, value) pair.r   r   rT   zempty multidict)rL   r'   popr+   r   )r-   rX   r   r   r    popitem  s
   
zMultiDict.popitemc                K   r   )z>Update the dictionary from *other*, overwriting existing keys.updateN)r   _update_itemsr   r   r   r    r     s   zMultiDict.updatec           
      C   s  |sd S i }|D ]F\}}}| |d}t|t| jjD ]}| jj| }|d |kr;|d ||< |||f| jj|<  nq| jj|||f t| jj||< qd}|t| jjk r| jj| }|d }| |}	|	d u rq|d7 }qQ||	kr{| jj|= n|d7 }|t| jjk sY| j  d S r/   )r   r   rO   rL   r'   re   r+   )
r-   r   	used_keysr   r|   rp   startrX   rS   posr   r   r    r     s8   
zMultiDict._update_itemsc                 C   s   |  |}| |}| jj}tt|D ]}|| }|d |kr0|||f||< |}| j   nq| jj|||f | j  d S |d }|t|k rf|| }|d |krZ||= n|d7 }|t|k sLd S d S r/   )r   r   rL   r'   r   rO   r+   re   )r-   r|   rp   r   r   rX   rS   rgtr   r   r    r     s*   



zMultiDict._replacer*   r8   ).r   r   r   r   r   r!   r.   r5   r:   r;   r<   r4   rV   typer   rW   rn   r   r   r   r   r   __copy__r   r   r   r   r   r   r   r   r   r   r   r"   r   r   r$   r#   r
   r   r   r   r   r   r   r   r   r   r    r     s    *

 #

(	 


$

	  r   c                   @   s"   e Zd ZdZdedefddZdS )CIMultiDictz@Dictionary with the support for duplicate case-insensitive keys.r|   r)   c                 C      |  S r*   titler   r   r   r    r        zCIMultiDict._titleN)r   r   r   r   rn   r   r   r   r   r    r     s    r   c                   @   sJ   e Zd ZdZdeee df fddZdefddZ	dee fd	d
Z
dS )r   z'Read-only proxy for MultiDict instance.r   zMultiDictProxy[_V]c                 C   ,   t |ttfstdt||j| _d S )Nz:ctor requires MultiDict or MultiDictProxy instance, not {})rU   r   r   r   rf   r   rL   r-   r   r   r   r    r.        
zMultiDictProxy.__init__r)   c                 C   s   t d| jj)Nzcan't pickle {} objects)r   rf   rh   r   r,   r   r   r    r   %  s   zMultiDictProxy.__reduce__c                 C   r   r   )r   r   r,   r   r   r    r   (     zMultiDictProxy.copyN)r   r   r   r   r   r   r!   r.   r   r   r   r   r   r   r    r     s
    	r   c                   @   sR   e Zd ZdZdeee ee f fddZde	de	fddZ
dee fd	d
ZdS )CIMultiDictProxyz)Read-only proxy for CIMultiDict instance.r   c                 C   r   )Nz>ctor requires CIMultiDict or CIMultiDictProxy instance, not {})rU   r   r   r   rf   r   rL   r   r   r   r    r.   0  r   zCIMultiDictProxy.__init__r|   r)   c                 C   r   r*   r   r   r   r   r    r   9  r   zCIMultiDictProxy._titlec                 C   r   r   )r   r   r,   r   r   r    r   <  r   zCIMultiDictProxy.copyN)r   r   r   r   r   r   r!   r   r.   rn   r   r   r   r   r   r   r    r   -  s
    	r   mdr)   c                 C   s   t | ts	td| jjS )Nz&Parameter should be multidict or proxy)rU   r}   r   rL   r(   )r   r   r   r    
getversionA  s   
r   )1enumr5   r   collections.abcr   r   r   r   r   r   r	   typingr
   r   r   r   r   r   r   _abcr   r   r   r   version_infor   typing_extensionsrn   r   r!   r"   Enumr#   r$   r(   r&   r=   rJ   rR   ro   r{   r}   r   r   r   r   r3   r<   r   r   r   r   r    <module>   s:    $$	

m  &