U
    h	                     @   s@   d dl Z d dlZe jdddZG dd dZdd Zd	d
 ZdS )    NZ_immutable_in__init__F)defaultc                       s0   e Zd ZdZdZ fddZ fddZ  ZS )
_ImmutablezImmutable mixin class c                    s(   t  | k	rtdnt || d S Nz+object doesn't support attribute assignment)_in__init__get	TypeErrorsuper__setattr__)selfnamevalue	__class__r   8./venv/lib/python3.8/site-packages/dns/_immutable_ctx.pyr
      s    
z_Immutable.__setattr__c                    s&   t  | k	rtdnt | d S r   )r   r   r   r	   __delattr__)r   r   r   r   r   r      s    
z_Immutable.__delattr__)__name__
__module____qualname____doc__	__slots__r
   r   __classcell__r   r   r   r   r      s   r   c                    s    fdd}t  |_|S )Nc               	      s.   t | d }z | | W 5 t | X d S )Nr   )r   setreset)argskwargsZpreviousfr   r   nf$   s    z_immutable_init.<locals>.nf)inspectZ	signatureZ__signature__)r   r   r   r   r   _immutable_init#   s    r    c                    sd   t  jkr2t j _t dr,t j _ }n.G  fdddt  } j|_ j|_ j|_|S )N__setstate__c                       s>   e Zd ZdZe fddZedr6e fddZ  ZS )zimmutable.<locals>.nclsr   c                    s   t  j|| d S N)r	   __init__r   r   r   r   r   r   r#   >   s    z immutable.<locals>.ncls.__init__r!   c                    s   t  j|| d S r"   )r	   r!   r$   r   r   r   r!   D   s    z$immutable.<locals>.ncls.__setstate__)	r   r   r   r   r    r#   hasattrr!   r   r   clsr   r   ncls:   s   
r(   )	r   __mro__r    r#   r%   r!   r   r   r   )r'   r(   r   r&   r   	immutable0   s    

r*   )Zcontextvarsr   Z
ContextVarr   r   r    r*   r   r   r   r   <module>   s
   