
    +h                        d dl mZ d dlmZ ddlmZ d Z G d d      Z G d d	      Z G d
 de      Z	 G d d      Z
d Z G d de      Zy)    )annotations)repeat   )_missingc                D    t        t        |       j                  d      )Nz objects are immutable)	TypeErrortype__name__selfs    Q/var/www/html/venv/lib/python3.12/site-packages/werkzeug/datastructures/mixins.pyis_immutabler      s     
tDz**--CD
EE    c                  f    e Zd ZdZdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd ZddZd ZddZy)ImmutableListMixinzOMakes a :class:`list` immutable.

    .. versionadded:: 0.5

    :private:
    Nc                l    | j                   | j                   S t        t        |             x}| _         |S N)_hash_cachehashtupler   rvs     r   __hash__zImmutableListMixin.__hash__   s5    '### $U4[ 11T	r   c                0    t        |       t        |       ffS r   )r	   listr   protocols     r   __reduce_ex__z ImmutableListMixin.__reduce_ex__       DzDJ=((r   c                    t        |        y r   r   r   keys     r   __delitem__zImmutableListMixin.__delitem__   
    Tr   c                    t        |        y r   r!   r   others     r   __iadd__zImmutableListMixin.__iadd__"   r%   r   c                    t        |        y r   r!   r'   s     r   __imul__zImmutableListMixin.__imul__%   r%   r   c                    t        |        y r   r!   r   r#   values      r   __setitem__zImmutableListMixin.__setitem__(   r%   r   c                    t        |        y r   r!   r   items     r   appendzImmutableListMixin.append+   r%   r   c                    t        |        y r   r!   r1   s     r   removezImmutableListMixin.remove.   r%   r   c                    t        |        y r   r!   )r   iterables     r   extendzImmutableListMixin.extend1   r%   r   c                    t        |        y r   r!   r   posr.   s      r   insertzImmutableListMixin.insert4   r%   r   c                    t        |        y r   r!   )r   indexs     r   popzImmutableListMixin.pop7   r%   r   c                    t        |        y r   r!   r   s    r   reversezImmutableListMixin.reverse:   r%   r   c                    t        |        y r   r!   )r   r#   rA   s      r   sortzImmutableListMixin.sort=   r%   r   ))NF)r
   
__module____qualname____doc__r   r   r   r$   r)   r+   r/   r3   r5   r8   r<   r?   rA   rC    r   r   r   r      sO     K)r   r   c                  r     e Zd ZdZdZed fd	       Zd Zd Zd Z	ddZ
d Zdd	Zd
 Zd Zd Zd Z xZS )ImmutableDictMixinzOMakes a :class:`dict` immutable.

    .. versionadded:: 0.5

    :private:
    Nc                n    t         |   |       }|j                  t        |t	        |                   |S r   )super__new____init__zipr   )clskeysr.   instance	__class__s       r   fromkeyszImmutableDictMixin.fromkeysK   s/    7?3'#dF5M23r   c                0    t        |       t        |       ffS r   )r	   dictr   s     r   r   z ImmutableDictMixin.__reduce_ex__Q   r   r   c                "    | j                         S r   itemsr   s    r   _iter_hashitemsz"ImmutableDictMixin._iter_hashitemsT   s    zz|r   c                    | j                   | j                   S t        t        | j                                     x}| _         |S r   )r   r   	frozensetrZ   r   s     r   r   zImmutableDictMixin.__hash__W   s?    '### $Yt/C/C/E%F GGT	r   c                    t        |        y r   r!   r   r#   defaults      r   
setdefaultzImmutableDictMixin.setdefault]   r%   r   c                    t        |        y r   r!   r   argskwargss      r   updatezImmutableDictMixin.update`   r%   r   c                    t        |        y r   r!   r^   s      r   r?   zImmutableDictMixin.popc   r%   r   c                    t        |        y r   r!   r   s    r   popitemzImmutableDictMixin.popitemf   r%   r   c                    t        |        y r   r!   r-   s      r   r/   zImmutableDictMixin.__setitem__i   r%   r   c                    t        |        y r   r!   r"   s     r   r$   zImmutableDictMixin.__delitem__l   r%   r   c                    t        |        y r   r!   r   s    r   clearzImmutableDictMixin.clearo   r%   r   r   )r
   rE   rF   rG   r   classmethodrT   r   rZ   r   r`   re   r?   rh   r/   r$   rl   __classcell__rS   s   @r   rJ   rJ   A   sS     K 
)r   rJ   c                  <    e Zd ZdZd Zd Zd Zd Zd Zd Z	d
d	Z
y)ImmutableMultiDictMixinzTMakes a :class:`MultiDict` immutable.

    .. versionadded:: 0.5

    :private:
    c                P    t        |       t        | j                  d            ffS NT)multi)r	   r   rY   r   s     r   r   z%ImmutableMultiDictMixin.__reduce_ex__{   s$    DzD$!78:::r   c                &    | j                  d      S rs   rX   r   s    r   rZ   z'ImmutableMultiDictMixin._iter_hashitems~   s    zzz%%r   c                    t        |        y r   r!   r-   s      r   addzImmutableMultiDictMixin.add   r%   r   c                    t        |        y r   r!   r   s    r   popitemlistz#ImmutableMultiDictMixin.popitemlist   r%   r   c                    t        |        y r   r!   r"   s     r   poplistzImmutableMultiDictMixin.poplist   r%   r   c                    t        |        y r   r!   )r   r#   new_lists      r   setlistzImmutableMultiDictMixin.setlist   r%   r   Nc                    t        |        y r   r!   )r   r#   default_lists      r   setlistdefaultz&ImmutableMultiDictMixin.setlistdefault   r%   r   r   )r
   rE   rF   rG   r   rZ   rw   ry   r{   r~   r   rH   r   r   rq   rq   s   s*    ;&r   rq   c                  j    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd ZdefdZd Zd Zd Zy)ImmutableHeadersMixinzMakes 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.

    .. versionadded:: 0.5

    :private:
    c                    t        |        y r   r!   )r   r#   rd   s      r   r$   z!ImmutableHeadersMixin.__delitem__   r%   r   c                    t        |        y r   r!   r-   s      r   r/   z!ImmutableHeadersMixin.__setitem__   r%   r   c                    t        |        y r   r!   r   _key_valuerd   s       r   setzImmutableHeadersMixin.set   r%   r   c                    t        |        y r   r!   )r   r#   valuess      r   r~   zImmutableHeadersMixin.setlist   r%   r   c                    t        |        y r   r!   r   s       r   rw   zImmutableHeadersMixin.add   r%   r   c                    t        |        y r   r!   )r   r   r   _kwargss       r   
add_headerz ImmutableHeadersMixin.add_header   r%   r   c                    t        |        y r   r!   r"   s     r   r5   zImmutableHeadersMixin.remove   r%   r   c                    t        |        y r   r!   rb   s      r   r8   zImmutableHeadersMixin.extend   r%   r   c                    t        |        y r   r!   rb   s      r   re   zImmutableHeadersMixin.update   r%   r   c                    t        |        y r   r!   r:   s      r   r<   zImmutableHeadersMixin.insert   r%   r   Nc                    t        |        y r   r!   r^   s      r   r?   zImmutableHeadersMixin.pop   r%   r   c                    t        |        y r   r!   r   s    r   rh   zImmutableHeadersMixin.popitem   r%   r   c                    t        |        y r   r!   r^   s      r   r`   z ImmutableHeadersMixin.setdefault   r%   r   c                    t        |        y r   r!   r^   s      r   r   z$ImmutableHeadersMixin.setlistdefault   r%   r   )r
   rE   rF   rG   r$   r/   r   r~   rw   r   r5   r8   re   r<   r   r?   rh   r`   r   rH   r   r   r   r      sT     H r   r   c                       fd} |_         |S )Nc                     t        t        t        |             |i |}| j                  | j                  |        |S r   )getattrrL   UpdateDictMixin	on_update)r   rc   kwr   names       r   oncallz_calls_update.<locals>.oncall   s=    8WU?D148$E"E>>%NN4 	r   )r
   )r   r   s   ` r   _calls_updater      s     FOMr   c                       e Zd ZdZdZd
 fd	Zef fd	Z ed      Z	 ed      Z
 ed      Z ed      Z ed	      Z xZS )r   zbMakes dicts call `self.on_update` on modifications.

    .. versionadded:: 0.5

    :private:
    Nc                n    || v}t         |   ||      }|r| j                  | j                  |        |S r   )rL   r`   r   r   r#   r_   modifiedr   rS   s        r   r`   zUpdateDictMixin.setdefault   s:    d?WW-2NN4 	r   c                    || v }|t         u rt        | 	  |      }nt        | 	  ||      }|r| j                  | j                  |        |S r   )r   rL   r?   r   r   s        r   r?   zUpdateDictMixin.pop   sO    $;hS!BS'*B2NN4 	r   r/   r$   rl   rh   re   r   )r
   rE   rF   rG   r   r`   r   r?   r   r/   r$   rl   rh   re   rn   ro   s   @r   r   r      sR     I  (   .K.K'"EI&G8$Fr   r   N)
__future__r   	itertoolsr   	_internalr   r   r   rJ   rq   r   r   rV   r   rH   r   r   <module>r      sS    "   F2 2j/ /d0 <2 2j
%d %r   