U
    /e                     @  s(  d dl mZ d dlZd dlmZmZmZmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZ d d	lmZmZmZmZ ed
ZedZedZerd dlmZmZ edZG dd deZejZG dd deeef ZdddddZ dddddZ!ddddddZ"dddd d!Z#dS )"    )annotationsN)CallableIterableIteratorMapping)contextmanager)Enumwraps)chain)MutableMapping)TYPE_CHECKINGAnyTypeVarcastTKTVT)	ParamSpecSelfPc                   @  s   e Zd ZdZdS )	NoDefaultN)__name__
__module____qualname__	nodefault r   r   //tmp/pip-unpacked-wheel-z3s6s24u/zict/common.pyr      s   r   c                   @  s   e Zd ZU dZded< ddddZddd	d
ZdddddZd+ddddddZdddddZ	dddddZ
ddddZdddd Zd!dd"d#d$Zddd%d&Zed'dd(d)Zd*S ),ZictBasezBase class for zict mappingszthreading.RLocklockNone)returnc                 C  s   t  | _d S N)	threadingRLockr   selfr   r   r   __init__$   s    zZictBase.__init__zdict[str, Any]c                 C  s   | j  }|d= |S )Nr   )__dict__copyr&   stater   r   r   __getstate__'   s    
zZictBase.__getstate__)r+   r!   c                 C  s   || _ t | _d S r"   )r(   r#   r$   r   r*   r   r   r   __setstate__,   s    zZictBase.__setstate__r   z)Mapping[KT, VT] | Iterable[tuple[KT, VT]]r   )otherkwargsr!   c                K  s.   t |dr| }t|| }| | d S )Nitems)hasattrr0   r   
_do_update)r&   r.   r/   r   r   r   update0   s    
zZictBase.updatezIterable[tuple[KT, VT]])r0   r!   c                 C  s   |D ]\}}|| |< qd S r"   r   )r&   r0   kvr   r   r   r2   ;   s    zZictBase._do_updater   )keyr!   c                 C  s   t | | dS )zvFlush *key* if possible.
        Not the same as ``m.pop(key, None)``, as it doesn't trigger ``__getitem__``.
        N)discard)r&   r6   r   r   r   r7   @   s    zZictBase.discardc                 C  s   dS )z0Release any system resources held by this objectNr   r%   r   r   r   closeF   s    zZictBase.closer   c                 C  s   | S r"   r   r%   r   r   r   	__enter__I   s    zZictBase.__enter__r   )argsr!   c                 G  s   |    d S r"   r8   )r&   r:   r   r   r   __exit__L   s    zZictBase.__exit__c                 C  s   |    d S r"   r;   r%   r   r   r   __del__O   s    zZictBase.__del__zIterator[None]c                 c  s&   | j   z
dV  W 5 | j   X dS )zkTo be used in a method decorated by ``@locked``.
        Temporarily releases the mapping's RLock.
        N)r   releaseacquirer%   r   r   r   unlockR   s    

zZictBase.unlockN)r   )r   r   r   __doc____annotations__r'   r,   r-   r3   r2   r7   r8   r9   r<   r=   r   r@   r   r   r   r   r      s   
 r   r   r    )zr!   c                  G  s    | D ]}t |dr|  qdS )zClose *z* if possible.r8   N)r1   r8   rC   Zzir   r   r   r8   ^   s    
r8   c                  G  s    | D ]}t |dr|  qdS )zFlush *z* if possible.flushN)r1   rE   rD   r   r   r   rE   e   s    
rE   zMutableMapping[KT, VT])mr6   r!   c                 C  s$   z
| |= W n t k
r   Y nX dS )znFlush *key* if possible.
    Not the same as ``m.pop(key, None)``, as it doesn't trigger ``__getitem__``.
    N)KeyError)rF   r6   r   r   r   r7   l   s    
r7   zCallable[P, VT])funcr!   c                   s"   t  dddd fdd}|S )z~Decorator for a method of ZictBase, which wraps the whole method in a
    instance-specific (but not key-specific) rlock.
    zP.argszP.kwargsr   )r:   r/   r!   c               
     s6   t t| d }|j  | |W  5 Q R  S Q R X d S )Nr   )r   r   r   )r:   r/   r&   rH   r   r   wrapper{   s    zlocked.<locals>.wrapperr	   )rH   rJ   r   rI   r   lockedv   s    rK   )$
__future__r   r#   collections.abcr   r   r   r   
contextlibr   enumr   	functoolsr
   	itertoolsr   typingr   r   r   r   r   r   r   r   Ztyping_extensionsr   r   r   r   r   r   r8   rE   r7   rK   r   r   r   r   <module>   s*   ?
