U
    d	                     @   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   6/tmp/pip-unpacked-wheel-pk5slln3/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kwargspreviousfr   r   nf$   s    z_immutable_init.<locals>.nf)inspect	signature__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
   