o
    'hC#                     @  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r)d 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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ZG dd deeef ZdS )"    )annotationsNupdate_wrapper)repeat   )_missingKVTF.)boundselft.Anyreturn
t.NoReturnc                 C  s   t t| jd)Nz objects are immutable)	TypeErrortype__name__r    r   Z/var/www/html/olx_land/venv/lib/python3.10/site-packages/werkzeug/datastructures/mixins.py_immutable_error   s   r   c                   @  s   e Zd ZU dZdZded< d0ddZd1ddZd2ddZd3ddZ	d3ddZ
d4ddZd5ddZd5ddZd6d d!Zd7d#d$Zd8d9d'd(Zd:d*d+Zd;d<d.d/ZdS )=ImmutableListMixinzOMakes a :class:`list` immutable.

    .. versionadded:: 0.5

    :private:
    N
int | None_hash_cacher   intc                 C  s&   | j d ur| j S tt|  }| _ |S N)r   hashtupler   rvr   r   r   __hash__!   s   
zImmutableListMixin.__hash__protocolt.SupportsIndexr   c                 C     t | t| ffS r   )r   listr   r"   r   r   r   __reduce_ex__'      z ImmutableListMixin.__reduce_ex__keyr   c                 C     t |  d S r   r   r   r)   r   r   r   __delitem__*      zImmutableListMixin.__delitem__otherc                 C  r*   r   r+   r   r/   r   r   r   __iadd__-   r.   zImmutableListMixin.__iadd__c                 C  r*   r   r+   r0   r   r   r   __imul__0   r.   zImmutableListMixin.__imul__valuec                 C  r*   r   r+   r   r)   r3   r   r   r   __setitem__3   r.   zImmutableListMixin.__setitem__itemc                 C  r*   r   r+   r   r6   r   r   r   append6   r.   zImmutableListMixin.appendc                 C  r*   r   r+   r7   r   r   r   remove9   r.   zImmutableListMixin.removeiterablec                 C  r*   r   r+   )r   r:   r   r   r   extend<   r.   zImmutableListMixin.extendposc                 C  r*   r   r+   r   r<   r3   r   r   r   insert?   r.   zImmutableListMixin.insertindexc                 C  r*   r   r+   )r   r@   r   r   r   popB   r.   zImmutableListMixin.popr   c                 C  r*   r   r+   r   r   r   r   reverseE   r.   zImmutableListMixin.reverseFrB   c                 C  r*   r   r+   )r   r)   rB   r   r   r   sortH   r.   zImmutableListMixin.sortr   r   r"   r#   r   r   r)   r   r   r   r/   r   r   r   r)   r   r3   r   r   r   )r6   r   r   r   )r:   r   r   r   r<   r   r3   r   r   r   )r?   )r@   r   r   r   r   r   r   r   )NF)r)   r   rB   r   r   r   )r   
__module____qualname____doc__r   __annotations__r!   r'   r-   r1   r2   r5   r8   r9   r;   r>   rA   rB   rC   r   r   r   r   r      s    
 










r   c                      s   e Zd ZU dZdZded< eejd4ddZ	eejd5ddZ	e	d6d7 fddZ	d8ddZ
d9ddZd:ddZd6d;d!d"Zd<d%d&Zd=d(d)Zd6d;d*d+Zd>d,d-Zd?d.d/Zd@d0d1Zd>d2d3Z  ZS )AImmutableDictMixinzMakes a :class:`dict` immutable.

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

    .. versionadded:: 0.5

    :private:
    Nr   r   keyscabc.Iterable[K]r3   Noner   #ImmutableDictMixin[K, t.Any | None]c                 C     d S r   r   clsrP   r3   r   r   r   fromkeysY   s   zImmutableDictMixin.fromkeysr	   ImmutableDictMixin[K, V]c                 C  rT   r   r   rU   r   r   r   rW   ^   s   V | None>ImmutableDictMixin[K, t.Any | None] | ImmutableDictMixin[K, V]c                   s$   t  | }|t|t| |S r   )super__new____init__zipr   )rV   rP   r3   instance	__class__r   r   rW   a   s   r"   r#   r   c                 C  r$   r   )r   dictr&   r   r   r   r'   i   r(   z ImmutableDictMixin.__reduce_ex__t.Iterable[t.Any]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   	frozensetrf   r   r   r   r   r!   o   s   
zImmutableDictMixin.__hash__r)   defaultr   c                 C  r*   r   r+   r   r)   rh   r   r   r   
setdefaultu   r.   zImmutableDictMixin.setdefaultargkwargsc                K  r*   r   r+   r   rk   rl   r   r   r   updatex   r.   zImmutableDictMixin.updater/   c                 C  r*   r   r+   r0   r   r   r   __ior__{   r.   zImmutableDictMixin.__ior__c                 C  r*   r   r+   ri   r   r   r   rA   ~   r.   zImmutableDictMixin.popc                 C  r*   r   r+   r   r   r   r   popitem   r.   zImmutableDictMixin.popitemc                 C  r*   r   r+   r4   r   r   r   r5      r.   zImmutableDictMixin.__setitem__c                 C  r*   r   r+   r,   r   r   r   r-      r.   zImmutableDictMixin.__delitem__c                 C  r*   r   r+   r   r   r   r   clear   r.   zImmutableDictMixin.clear)rP   rQ   r3   rR   r   rS   )rP   rQ   r3   r	   r   rX   r   )rP   rQ   r3   rY   r   rZ   rE   r   rc   rD   r)   r   rh   r   r   r   rk   r   rl   r   r   r   rG   r   r   rH   rF   )r   rK   rL   rM   r   rN   classmethodtoverloadrW   r'   rf   r!   rj   rn   ro   rA   rp   r5   r-   rq   __classcell__r   r   r`   r   rO   L   s.   
 








rO   c                   @  sX   e Zd ZdZdddZdd	d
ZdddZdddZdddZd ddZ	d!d"ddZ
dS )#ImmutableMultiDictMixinzTMakes a :class:`MultiDict` immutable.

    .. versionadded:: 0.5

    :private:
    r"   r#   r   r   c                 C  s   t | t| jddffS NT)multi)r   r%   re   r&   r   r   r   r'      s   z%ImmutableMultiDictMixin.__reduce_ex__rc   c                 C  s   | j ddS r{   rd   r   r   r   r   rf      r.   z'ImmutableMultiDictMixin._iter_hashitemsr)   r3   r   c                 C  r*   r   r+   r4   r   r   r   add   r.   zImmutableMultiDictMixin.addc                 C  r*   r   r+   r   r   r   r   popitemlist   r.   z#ImmutableMultiDictMixin.popitemlistc                 C  r*   r   r+   r,   r   r   r   poplist   r.   zImmutableMultiDictMixin.poplistnew_listc                 C  r*   r   r+   )r   r)   r   r   r   r   setlist   r.   zImmutableMultiDictMixin.setlistNdefault_listc                 C  r*   r   r+   )r   r)   r   r   r   r   setlistdefault   r.   z&ImmutableMultiDictMixin.setlistdefaultrE   rr   rH   ru   rF   )r)   r   r   r   r   r   r   )r)   r   r   r   r   r   )r   rK   rL   rM   r'   rf   r}   r~   r   r   r   r   r   r   r   rz      s    





rz   c                   @  s   e Zd ZdZd,ddZd-d
dZd.ddZd/ddZd.ddZd.ddZ	d0ddZ
d1ddZd1ddZd2ddZd3d d!Zd"efd4d$d%Zd5d&d'Zd4d(d)Zd4d*d+Zd"S )6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   rl   r   r   c                 K  r*   r   r+   )r   r)   rl   r   r   r   r-      r.   z!ImmutableHeadersMixin.__delitem__r3   c                 C  r*   r   r+   r4   r   r   r   r5      r.   z!ImmutableHeadersMixin.__setitem__c                K  r*   r   r+   r   r)   r3   rl   r   r   r   set   r.   zImmutableHeadersMixin.setvaluesc                 C  r*   r   r+   )r   r)   r   r   r   r   r      r.   zImmutableHeadersMixin.setlistc                K  r*   r   r+   r   r   r   r   r}      r.   zImmutableHeadersMixin.addc                K  r*   r   r+   r   r   r   r   
add_header   r.   z ImmutableHeadersMixin.add_headerc                 C  r*   r   r+   r,   r   r   r   r9      r.   zImmutableHeadersMixin.removerk   c                K  r*   r   r+   rm   r   r   r   r;      r.   zImmutableHeadersMixin.extendc                K  r*   r   r+   rm   r   r   r   rn      r.   zImmutableHeadersMixin.updater/   c                 C  r*   r   r+   r0   r   r   r   ro      r.   zImmutableHeadersMixin.__ior__r<   c                 C  r*   r   r+   r=   r   r   r   r>      r.   zImmutableHeadersMixin.insertNrh   c                 C  r*   r   r+   ri   r   r   r   rA      r.   zImmutableHeadersMixin.popc                 C  r*   r   r+   r   r   r   r   rp      r.   zImmutableHeadersMixin.popitemc                 C  r*   r   r+   ri   r   r   r   rj      r.   z ImmutableHeadersMixin.setdefaultc                 C  r*   r   r+   ri   r   r   r   r      r.   z$ImmutableHeadersMixin.setlistdefault)r)   r   rl   r   r   r   rH   )r)   r   r3   r   rl   r   r   r   )r)   r   r   r   r   r   rF   rt   rG   rI   rs   ru   )r   rK   rL   rM   r-   r5   r   r   r}   r   r9   r;   rn   ro   r>   r   rA   rp   rj   r   r   r   r   r   r      s"    












r   fc                   s   d	 fdd}t | S )
Nr   UpdateDictMixin[t.Any, t.Any]argsr   rl   r   c                  s.    | g|R i |}| j d ur|  |  |S r   )	on_update)r   r   rl   r    r   r   r   wrapper   s   

z_always_update.<locals>.wrapper)r   r   r   r   rl   r   r   r   r   )r   r   r   r   r   _always_update   s   

r   c                      s   e Zd ZU dZdZded< d*d+ fddZejd,ddZ	ejd-ddZ	ejd.ddZ	e
fd/ fddZ	ed0 fddZed1 fddZed2 fddZed3 fdd Ze	d*d4 fd$d%Zed5 fd(d)Z  ZS )6UpdateDictMixinzMakes dicts call `self.on_update` on modifications.

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

    .. versionadded:: 0.5

    :private:
    Nz%cabc.Callable[[te.Self], None] | Noner   r   te.Selfr)   r   rh   rY   r   r	   c                   s2   || v}t  ||}|r| jd ur| |  |S r   )r[   rj   r   r   r)   rh   modifiedr    r`   r   r   rj     s
   
zUpdateDictMixin.setdefaultc                 C  rT   r   r   r,   r   r   r   rA   	     zUpdateDictMixin.popc                 C  rT   r   r   ri   r   r   r   rA     r   r
   c                 C  rT   r   r   ri   r   r   r   rA     r   V | Tc                   sH   || v }|t u rt |}nt ||}|r"| jd ur"| |  |S r   )r   r[   rA   r   r   r`   r   r   rA     s   
r3   rR   c                   s   t  || d S r   )r[   r5   r4   r`   r   r   r5     s   zUpdateDictMixin.__setitem__c                   s   t  | d S r   )r[   r-   r,   r`   r   r   r-   !  s   zUpdateDictMixin.__delitem__c                   s   t    d S r   )r[   rq   r   r`   r   r   rq   %  s   zUpdateDictMixin.cleartuple[K, V]c                   s
   t   S r   )r[   rp   r   r`   r   r   rp   )  s   
zUpdateDictMixin.popitemrk   6cabc.Mapping[K, V] | cabc.Iterable[tuple[K, V]] | Nonerl   c                  s6   |d u rt  jdi | d S t  j|fi | d S )Nr   )r[   rn   rm   r`   r   r   rn   -  s   zUpdateDictMixin.updater/   /cabc.Mapping[K, V] | cabc.Iterable[tuple[K, V]]c                   s   t  |S r   )r[   ro   r0   r`   r   r   ro   9  s   zUpdateDictMixin.__ior__r   )r   r   r)   r   rh   rY   r   r	   )r   r   r)   r   r   r	   )r   r   r)   r   rh   r	   r   r	   )r   r   r)   r   rh   r
   r   r
   )r   r   r)   r   rh   r   r   r   )r)   r   r3   r	   r   rR   )r)   r   r   rR   )r   rR   )r   r   )rk   r   rl   r	   r   rR   )r/   r   r   r   )r   rK   rL   rM   r   rN   rj   rw   rx   rA   r   r   r5   r-   rq   rp   rn   ro   ry   r   r   r`   r   r      s2   
 
r   rJ   )r   r   r   r   ) 
__future__r   collections.abcabccabctypingrw   	functoolsr   	itertoolsr   	_internalr   TYPE_CHECKINGtyping_extensionsteTypeVarr   r	   r
   CallableAnyr   r   r   GenericrO   rz   r   r   rb   r   r   r   r   r   <module>   s&    



5B
;