a
    é´«jO#  ã                   @  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   ú]/var/www/html/laksyashrimp/venv/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ÚImmutableDictMixinzŽMakes 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 )+ÚUpdateDictMixinz¢Makes 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;