o
    q>e                     @  s   d dl mZ d dlmZ ddlmZ dd ZG dd dZG d	d
 d
ZG dd deZ	G dd dZ
dd ZG dd deZdS )    )annotations)repeat   )_missingc                 C  s   t t| jd)Nz objects are immutable)	TypeErrortype__name__self r   _/var/www/bmteknikk.ddns.net/venv/lib/python3.10/site-packages/werkzeug/datastructures/mixins.pyis_immutable   s   r   c                   @  s   e Zd ZdZdZdd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Zdd Zdd ZdddZdd Zd ddZdS )!ImmutableListMixinzOMakes a :class:`list` immutable.

    .. versionadded:: 0.5

    :private:
    Nc                 C  s&   | j d ur| j S tt|  }| _ |S N)_hash_cachehashtupler
   rvr   r   r   __hash__   s   
zImmutableListMixin.__hash__c                 C     t | t| ffS r   )r   listr
   protocolr   r   r   __reduce_ex__      z ImmutableListMixin.__reduce_ex__c                 C     t |  d S r   r   r
   keyr   r   r   __delitem__      zImmutableListMixin.__delitem__c                 C  r   r   r   r
   otherr   r   r   __iadd__"   r!   zImmutableListMixin.__iadd__c                 C  r   r   r   r"   r   r   r   __imul__%   r!   zImmutableListMixin.__imul__c                 C  r   r   r   r
   r   valuer   r   r   __setitem__(   r!   zImmutableListMixin.__setitem__c                 C  r   r   r   r
   itemr   r   r   append+   r!   zImmutableListMixin.appendc                 C  r   r   r   r)   r   r   r   remove.   r!   zImmutableListMixin.removec                 C  r   r   r   )r
   iterabler   r   r   extend1   r!   zImmutableListMixin.extendc                 C  r   r   r   r
   posr'   r   r   r   insert4   r!   zImmutableListMixin.insertc                 C  r   r   r   )r
   indexr   r   r   pop7   r!   zImmutableListMixin.popc                 C  r   r   r   r	   r   r   r   reverse:   r!   zImmutableListMixin.reverseFc                 C  r   r   r   )r
   r   r5   r   r   r   sort=   r!   zImmutableListMixin.sort)r2   )NF)r   
__module____qualname____doc__r   r   r   r    r$   r%   r(   r+   r,   r.   r1   r4   r5   r6   r   r   r   r   r      s     
r   c                      s~   e Zd ZdZdZed fdd	Zdd Zdd Zd	d
 Z	dddZ
dd ZdddZdd Zdd Zdd Zdd Z  ZS )ImmutableDictMixinzOMakes a :class:`dict` immutable.

    .. versionadded:: 0.5

    :private:
    Nc                   s$   t  | }|t|t| |S r   )super__new____init__zipr   )clskeysr'   instance	__class__r   r   fromkeysK   s   zImmutableDictMixin.fromkeysc                 C  r   r   )r   dictr   r   r   r   r   Q   r   z ImmutableDictMixin.__reduce_ex__c                 C  s   |   S r   itemsr	   r   r   r   _iter_hashitemsT   s   z"ImmutableDictMixin._iter_hashitemsc                 C  s*   | j d ur| j S tt|   }| _ |S r   )r   r   	frozensetrH   r   r   r   r   r   W   s   
zImmutableDictMixin.__hash__c                 C  r   r   r   r
   r   defaultr   r   r   
setdefault]   r!   zImmutableDictMixin.setdefaultc                 O  r   r   r   r
   argskwargsr   r   r   update`   r!   zImmutableDictMixin.updatec                 C  r   r   r   rJ   r   r   r   r4   c   r!   zImmutableDictMixin.popc                 C  r   r   r   r	   r   r   r   popitemf   r!   zImmutableDictMixin.popitemc                 C  r   r   r   r&   r   r   r   r(   i   r!   zImmutableDictMixin.__setitem__c                 C  r   r   r   r   r   r   r   r    l   r!   zImmutableDictMixin.__delitem__c                 C  r   r   r   r	   r   r   r   clearo   r!   zImmutableDictMixin.clearr   )r   r7   r8   r9   r   classmethodrD   r   rH   r   rL   rP   r4   rQ   r(   r    rR   __classcell__r   r   rB   r   r:   A   s    

r:   c                   @  sJ   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dddZ
dS )ImmutableMultiDictMixinzTMakes a :class:`MultiDict` immutable.

    .. versionadded:: 0.5

    :private:
    c                 C  s   t | t| jddffS NT)multi)r   r   rG   r   r   r   r   r   {   s   z%ImmutableMultiDictMixin.__reduce_ex__c                 C  s   | j ddS rV   rF   r	   r   r   r   rH   ~   r!   z'ImmutableMultiDictMixin._iter_hashitemsc                 C  r   r   r   r&   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.poplistc                 C  r   r   r   )r
   r   new_listr   r   r   setlist   r!   zImmutableMultiDictMixin.setlistNc                 C  r   r   r   )r
   r   default_listr   r   r   setlistdefault   r!   z&ImmutableMultiDictMixin.setlistdefaultr   )r   r7   r8   r9   r   rH   rX   rY   rZ   r\   r^   r   r   r   r   rU   s   s    rU   c                   @  s   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd ZdefddZdd Zdd Zdd ZdS )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                 K  r   r   r   )r
   r   rO   r   r   r   r       r!   z!ImmutableHeadersMixin.__delitem__c                 C  r   r   r   r&   r   r   r   r(      r!   z!ImmutableHeadersMixin.__setitem__c                 K  r   r   r   r
   _key_valuerO   r   r   r   set   r!   zImmutableHeadersMixin.setc                 C  r   r   r   )r
   r   valuesr   r   r   r\      r!   zImmutableHeadersMixin.setlistc                 K  r   r   r   r`   r   r   r   rX      r!   zImmutableHeadersMixin.addc                 K  r   r   r   )r
   ra   rb   _kwargsr   r   r   
add_header   r!   z ImmutableHeadersMixin.add_headerc                 C  r   r   r   r   r   r   r   r,      r!   zImmutableHeadersMixin.removec                 O  r   r   r   rM   r   r   r   r.      r!   zImmutableHeadersMixin.extendc                 O  r   r   r   rM   r   r   r   rP      r!   zImmutableHeadersMixin.updatec                 C  r   r   r   r/   r   r   r   r1      r!   zImmutableHeadersMixin.insertNc                 C  r   r   r   rJ   r   r   r   r4      r!   zImmutableHeadersMixin.popc                 C  r   r   r   r	   r   r   r   rQ      r!   zImmutableHeadersMixin.popitemc                 C  r   r   r   rJ   r   r   r   rL      r!   z ImmutableHeadersMixin.setdefaultc                 C  r   r   r   rJ   r   r   r   r^      r!   z$ImmutableHeadersMixin.setlistdefault)r   r7   r8   r9   r    r(   rc   r\   rX   rf   r,   r.   rP   r1   r   r4   rQ   rL   r^   r   r   r   r   r_      s     	r_   c                   s    fdd} |_ |S )Nc                   s2   t tt|  |i |}| jd ur| |  |S r   )getattrr;   UpdateDictMixin	on_update)r
   rN   kwr   namer   r   oncall   s   

z_calls_update.<locals>.oncall)r   )rl   rm   r   rk   r   _calls_update   s   rn   c                      s^   e Zd ZdZdZd fdd	Zef fdd	ZedZ	edZ
ed	Zed
ZedZ  ZS )rh   zbMakes dicts call `self.on_update` on modifications.

    .. versionadded:: 0.5

    :private:
    Nc                   s2   || v}t  ||}|r| jd ur| |  |S r   )r;   rL   ri   r
   r   rK   modifiedr   rB   r   r   rL      s
   
zUpdateDictMixin.setdefaultc                   sH   || v }|t u rt |}nt ||}|r"| jd ur"| |  |S r   )r   r;   r4   ri   ro   rB   r   r   r4      s   
zUpdateDictMixin.popr(   r    rR   rQ   rP   r   )r   r7   r8   r9   ri   rL   r   r4   rn   r(   r    rR   rQ   rP   rT   r   r   rB   r   rh      s    
rh   N)
__future__r   	itertoolsr   	_internalr   r   r   r:   rU   r_   rn   rE   rh   r   r   r   r   <module>   s    525