a
    0hC#                     @  s  d dl mZ d dlmZ d dlZd dlmZ d dl	m
Z
 ddlmZ ejrRd dlZedZedZed	Zejd
ejdejf dZdddddZG dd dZG dd dejeef ZG dd deeef ZG dd dZd
d
dddZG dd deeef ZdS )    )annotationsNupdate_wrapper)repeat   )_missingKVTF.)boundt.Any
t.NoReturnselfreturnc                 C  s   t t| jdd S )Nz objects are immutable)	TypeErrortype__name__r    r   L/var/www/auris/lib/python3.9/site-packages/werkzeug/datastructures/mixins.py_immutable_error   s    r   c                   @  s   e Zd ZU dZdZded< ddddZd	d
dddZd
ddddZd
ddddZ	d
ddddZ
d
d
ddddZd
ddddZd
ddddZd
ddd d!Zd
d
dd"d#d$Zd0d
dd&d'd(Zd
dd)d*d+Zd1d
d
dd-d.d/ZdS )2ImmutableListMixinzOMakes a :class:`list` immutable.

    .. versionadded:: 0.5

    :private:
    N
int | None_hash_cacheintr   c                 C  s&   | j d ur| j S tt|  }| _ |S N)r   hashtupler   rvr   r   r   __hash__!   s    
zImmutableListMixin.__hash__t.SupportsIndexr   protocolr   c                 C  s   t | t| ffS r   )r   listr   r&   r   r   r   __reduce_ex__'   s    z ImmutableListMixin.__reduce_ex__r   keyr   c                 C  s   t |  d S r   r   r   r+   r   r   r   __delitem__*   s    zImmutableListMixin.__delitem__otherr   c                 C  s   t |  d S r   r,   r   r0   r   r   r   __iadd__-   s    zImmutableListMixin.__iadd__c                 C  s   t |  d S r   r,   r1   r   r   r   __imul__0   s    zImmutableListMixin.__imul__r+   valuer   c                 C  s   t |  d S r   r,   r   r+   r5   r   r   r   __setitem__3   s    zImmutableListMixin.__setitem__)itemr   c                 C  s   t |  d S r   r,   r   r8   r   r   r   append6   s    zImmutableListMixin.appendc                 C  s   t |  d S r   r,   r9   r   r   r   remove9   s    zImmutableListMixin.remove)iterabler   c                 C  s   t |  d S r   r,   )r   r<   r   r   r   extend<   s    zImmutableListMixin.extendposr5   r   c                 C  s   t |  d S r   r,   r   r?   r5   r   r   r   insert?   s    zImmutableListMixin.insert)indexr   c                 C  s   t |  d S r   r,   )r   rC   r   r   r   popB   s    zImmutableListMixin.popr   c                 C  s   t |  d S r   r,   r   r   r   r   reverseE   s    zImmutableListMixin.reverseF)r+   rE   r   c                 C  s   t |  d S r   r,   )r   r+   rE   r   r   r   sortH   s    zImmutableListMixin.sort)rB   )NF)r   
__module____qualname____doc__r   __annotations__r#   r)   r.   r2   r3   r7   r:   r;   r=   rA   rD   rE   rF   r   r   r   r   r      s   
r   c                      s*  e Zd ZU dZdZded< eejddddd	d
Z	eejdddddd
Z	ed3dddd fdd
Z	dddddZ
ddddZddddZd4dddddd Zdddd!d"d#Zddd$d%d&Zd5ddddd'd(Zddd)d*Zdddd+d,d-Zddd.d/d0Zddd1d2Z  ZS )6ImmutableDictMixinzMakes a :class:`dict` immutable.

    .. versionchanged:: 3.1
        Disallow ``|=`` operator.

    .. versionadded:: 0.5

    :private:
    Nr   r   zcabc.Iterable[K]Nonez#ImmutableDictMixin[K, t.Any | None])keysr5   r   c                 C  s   d S r   r   clsrM   r5   r   r   r   fromkeysY   s    zImmutableDictMixin.fromkeysr	   zImmutableDictMixin[K, V]c                 C  s   d S r   r   rN   r   r   r   rP   ^   s    V | Nonez>ImmutableDictMixin[K, t.Any | None] | ImmutableDictMixin[K, V]c                   s$   t  | }|t|t| |S r   )super__new____init__zipr   )rO   rM   r5   instance	__class__r   r   rP   a   s    r$   r   r%   c                 C  s   t | t| ffS r   )r   dictr(   r   r   r   r)   i   s    z ImmutableDictMixin.__reduce_ex__t.Iterable[t.Any]r   c                 C  s   |   S r   itemsr   r   r   r   _iter_hashitemsl   s    z"ImmutableDictMixin._iter_hashitemsr   c                 C  s*   | j d ur| j S tt|   }| _ |S r   )r   r   	frozensetr]   r!   r   r   r   r#   o   s    
zImmutableDictMixin.__hash__r   r+   defaultr   c                 C  s   t |  d S r   r,   r   r+   r`   r   r   r   
setdefaultu   s    zImmutableDictMixin.setdefaultargkwargsr   c                K  s   t |  d S r   r,   r   rd   re   r   r   r   updatex   s    zImmutableDictMixin.updater/   c                 C  s   t |  d S r   r,   r1   r   r   r   __ior__{   s    zImmutableDictMixin.__ior__c                 C  s   t |  d S r   r,   ra   r   r   r   rD   ~   s    zImmutableDictMixin.popc                 C  s   t |  d S r   r,   r   r   r   r   popitem   s    zImmutableDictMixin.popitemr4   c                 C  s   t |  d S r   r,   r6   r   r   r   r7      s    zImmutableDictMixin.__setitem__r*   c                 C  s   t |  d S r   r,   r-   r   r   r   r.      s    zImmutableDictMixin.__delitem__c                 C  s   t |  d S r   r,   r   r   r   r   clear   s    zImmutableDictMixin.clear)N)N)N)r   rG   rH   rI   r   rJ   classmethodtoverloadrP   r)   r]   r#   rb   rg   rh   rD   ri   r7   r.   rj   __classcell__r   r   rW   r   rK   L   s,   

 rK   c                   @  s   e Zd ZdZdddddZddd	d
ZddddddZddddZdddddZddddddZ	dddddddZ
dS )ImmutableMultiDictMixinzTMakes a :class:`MultiDict` immutable.

    .. versionadded:: 0.5

    :private:
    r$   r   r%   c                 C  s   t | t| jddffS NT)Zmulti)r   r'   r\   r(   r   r   r   r)      s    z%ImmutableMultiDictMixin.__reduce_ex__rZ   r   c                 C  s   | j ddS rp   r[   r   r   r   r   r]      s    z'ImmutableMultiDictMixin._iter_hashitemsr   r4   c                 C  s   t |  d S r   r,   r6   r   r   r   add   s    zImmutableMultiDictMixin.addc                 C  s   t |  d S r   r,   r   r   r   r   popitemlist   s    z#ImmutableMultiDictMixin.popitemlistr*   c                 C  s   t |  d S r   r,   r-   r   r   r   poplist   s    zImmutableMultiDictMixin.poplist)r+   new_listr   c                 C  s   t |  d S r   r,   )r   r+   rt   r   r   r   setlist   s    zImmutableMultiDictMixin.setlistN)r+   default_listr   c                 C  s   t |  d S r   r,   )r   r+   rv   r   r   r   setlistdefault   s    z&ImmutableMultiDictMixin.setlistdefault)N)r   rG   rH   rI   r)   r]   rq   rr   rs   ru   rw   r   r   r   r   ro      s   ro   c                   @  s"  e Zd ZdZddddddZdddddd	Zddddd
ddZddddddZddddd
ddZddddd
ddZ	dddddZ
ddddddZddddddZdddddZddddd d!Zd"efdddd#d$d%Zdd&d'd(Zdddd#d)d*Zdddd#d+d,Zd"S )-ImmutableHeadersMixina  Makes a :class:`Headers` immutable.  We do not mark them as
    hashable though since the only usecase for this datastructure
    in Werkzeug is a view on a mutable structure.

    .. versionchanged:: 3.1
        Disallow ``|=`` operator.

    .. versionadded:: 0.5

    :private:
    r   r   )r+   re   r   c                 K  s   t |  d S r   r,   )r   r+   re   r   r   r   r.      s    z!ImmutableHeadersMixin.__delitem__r4   c                 C  s   t |  d S r   r,   r6   r   r   r   r7      s    z!ImmutableHeadersMixin.__setitem__)r+   r5   re   r   c                K  s   t |  d S r   r,   r   r+   r5   re   r   r   r   set   s    zImmutableHeadersMixin.set)r+   valuesr   c                 C  s   t |  d S r   r,   )r   r+   r{   r   r   r   ru      s    zImmutableHeadersMixin.setlistc                K  s   t |  d S r   r,   ry   r   r   r   rq      s    zImmutableHeadersMixin.addc                K  s   t |  d S r   r,   ry   r   r   r   
add_header   s    z ImmutableHeadersMixin.add_headerr*   c                 C  s   t |  d S r   r,   r-   r   r   r   r;      s    zImmutableHeadersMixin.removerc   c                K  s   t |  d S r   r,   rf   r   r   r   r=      s    zImmutableHeadersMixin.extendc                K  s   t |  d S r   r,   rf   r   r   r   rg      s    zImmutableHeadersMixin.updater/   c                 C  s   t |  d S r   r,   r1   r   r   r   rh      s    zImmutableHeadersMixin.__ior__r>   c                 C  s   t |  d S r   r,   r@   r   r   r   rA      s    zImmutableHeadersMixin.insertNr_   c                 C  s   t |  d S r   r,   ra   r   r   r   rD      s    zImmutableHeadersMixin.popr   c                 C  s   t |  d S r   r,   r   r   r   r   ri      s    zImmutableHeadersMixin.popitemc                 C  s   t |  d S r   r,   ra   r   r   r   rb      s    z ImmutableHeadersMixin.setdefaultc                 C  s   t |  d S r   r,   ra   r   r   r   rw      s    z$ImmutableHeadersMixin.setlistdefault)r   rG   rH   rI   r.   r7   rz   ru   rq   r|   r;   r=   rg   rh   rA   r   rD   ri   rb   rw   r   r   r   r   rx      s    rx   )fr   c                   s"   ddddd fdd}t | S )NzUpdateDictMixin[t.Any, t.Any]r   )r   argsre   r   c                  s.    | g|R i |}| j d ur*|  |  |S r   )	on_update)r   r~   re   r"   r}   r   r   wrapper   s    

z_always_update.<locals>.wrapperr   )r}   r   r   r   r   _always_update   s    
r   c                      s6  e Zd ZU dZdZded< d)ddddd	 fd
dZejddddddZ	ejddddd	ddZ	ejddddd	ddZ	e
fddddd	 fddZ	edddd fddZeddd fddZedd fddZedd fdd Zed*d!ddd" fd#d$Zed%dd& fd'd(Z  ZS )+UpdateDictMixinzMakes dicts call `self.on_update` on modifications.

    .. versionchanged:: 3.1
        Implement ``|=`` operator.

    .. versionadded:: 0.5

    :private:
    Nz%cabc.Callable[[te.Self], None] | Noner   zte.Selfr   rQ   r	   )r   r+   r`   r   c                   s2   || v}t  ||}|r.| jd ur.| |  |S r   )rR   rb   r   r   r+   r`   modifiedr"   rW   r   r   rb     s
    
zUpdateDictMixin.setdefault)r   r+   r   c                 C  s   d S r   r   r-   r   r   r   rD   	  s    zUpdateDictMixin.popc                 C  s   d S r   r   ra   r   r   r   rD     s    r
   c                 C  s   d S r   r   ra   r   r   r   rD     s    zV | Tc                   sH   || v }|t u rt |}nt ||}|rD| jd urD| |  |S r   )r   rR   rD   r   r   rW   r   r   rD     s    
rL   r4   c                   s   t  || d S r   )rR   r7   r6   rW   r   r   r7     s    zUpdateDictMixin.__setitem__r*   c                   s   t  | d S r   )rR   r.   r-   rW   r   r   r.   !  s    zUpdateDictMixin.__delitem__r   c                   s   t    d S r   )rR   rj   r   rW   r   r   rj   %  s    zUpdateDictMixin.clearztuple[K, V]c                   s
   t   S r   )rR   ri   r   rW   r   r   ri   )  s    zUpdateDictMixin.popitemz6cabc.Mapping[K, V] | cabc.Iterable[tuple[K, V]] | Nonerc   c                  s4   |d u rt  jf i | nt  j|fi | d S r   )rR   rg   rf   rW   r   r   rg   -  s    zUpdateDictMixin.updatez/cabc.Mapping[K, V] | cabc.Iterable[tuple[K, V]]r/   c                   s   t  |S r   )rR   rh   r1   rW   r   r   rh   9  s    zUpdateDictMixin.__ior__)N)N)r   rG   rH   rI   r   rJ   rb   rl   rm   rD   r   r   r7   r.   rj   ri   rg   rh   rn   r   r   rW   r   r      s0   

 r   ) 
__future__r   collections.abcabcZcabctypingrl   	functoolsr   	itertoolsr   	_internalr   TYPE_CHECKINGZtyping_extensionsteTypeVarr   r	   r
   CallableAnyr   r   r   GenericrK   ro   rx   r   rY   r   r   r   r   r   <module>   s$   


5B;