o
    ê}”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   úg/Users/abhinavbhinder/Documents/map/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.insertéÿÿÿÿc                 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)Z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   Znew_listr   r   r   ÚsetlistŠ   r!   zImmutableMultiDictMixin.setlistNc                 C  r   r   r   )r
   r   Zdefault_listr   r   r   Úsetlistdefault�   r!   z&ImmutableMultiDictMixin.setlistdefaultr   )r   r7   r8   r9   r   rH   rW   rX   rY   rZ   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 )ÚImmutableHeadersMixinzÞ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.

    .. 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   rZ   ¤   r!   zImmutableHeadersMixin.setlistc                 K  r   r   r   r]   r   r   r   rW   §   r!   zImmutableHeadersMixin.addc                 K  r   r   r   )r
   r^   r_   Ú_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(   r`   rZ   rW   rc   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   )ri   rj   r   rh   r   Ú_calls_updateÆ   s   rk   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 )re   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   rf   ©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   rf   rl   rB   r   r   r4   ä   s   
zUpdateDictMixin.popr(   r    rR   rQ   rP   r   )r   r7   r8   r9   rf   rL   r   r4   rk   r(   r    rR   rQ   rP   rT   r   r   rB   r   re   Ó   s    
re   N)Ú
__future__r   Ú	itertoolsr   Ú	_internalr   r   r   r:   rU   r\   rk   rE   re   r   r   r   r   Ú<module>   s    525