3
W>p_                 @   s   d Z ddlmZmZ ddlZddlZddlmZ ddlm	Z	m
Z
 ddlmZmZ ddlmZ G dd	 d	eZi Ze	 ZG d
d deZdZdS )z7holds locking functionality that works across processes    )absolute_importunicode_literalsN)contextmanager)LockRLock)FileLockTimeout)Pathc                   s8   e Zd Z fddZd
 fdd	Zd fdd		Z  ZS )_CountedFileLockc                s^   t jj|}t jj|s<yt j| W n tk
r:   Y nX tt| j| d| _	t
 | _d S )Nr   )ospathdirnameexistsmakedirsOSErrorsuperr
   __init__countr   thread_safe)self	lock_fileparent)	__class__ /home/aldo/Documentos/tesis/tesis/device auto/pruebas pulsar/pruebaclonado/envClonado/lib/python3.6/site-packages/virtualenv/util/lock.pyr      s    z_CountedFileLock.__init__N皙?c                sB   | j 2 | jdkr&tt| j||d |  jd7  _W d Q R X d S )Nr   )timeoutpoll_intervall   )r   r   r   r
   acquire)r   r   r   )r   r   r   r      s    
z_CountedFileLock.acquireFc          
      s@   | j 0 | jdkr tt| j  t| jd d| _W d Q R X d S )Nr   r   )r   r   r   r
   releasemax)r   force)r   r   r   r        s    
z_CountedFileLock.release)Nr   )F)__name__
__module____qualname__r   r   r    __classcell__r   r   )r   r   r
      s   r
   c               @   s~   e Zd Zdd Zdd Zdd Zdd Zdd
dZedd Z	dd Z
dd Zdd ZdddZedd ZedddZdS )ReentrantFileLockc             C   s(   d | _ t|}|j r|j n|| _d S )N)_lockr	   r   resolver   )r   folderr   r   r   r   r   ,   s    zReentrantFileLock.__init__c             C   s   dj | jj| jS )Nz{}({}))formatr   r#   r   )r   r   r   r   __repr__1   s    zReentrantFileLock.__repr__c             C   s   t | j| S )N)r'   r   )r   otherr   r   r   __div__4   s    zReentrantFileLock.__div__c             C   s
   | j |S )N)r.   )r   r-   r   r   r   __truediv__7   s    zReentrantFileLock.__truediv__ c          
   C   s@   t | jdj| }t |tkr.t|t|< t| S Q R X d S )Nz{}.lock)strr   r+   _store_lock_lock_storer
   )r   namer   r   r   r   _create_lock:   s
    zReentrantFileLock._create_lockc             C   sF   t 8 | d k	r8| j | jdkr.tj| jd  W d Q R X W d Q R X d S )Nr   )r2   r   r   r3   popr   )lockr   r   r   	_del_lockA   s
    
zReentrantFileLock._del_lockc             C   s   | j | j d S )N)r8   r(   )r   r   r   r   __del__I   s    zReentrantFileLock.__del__c             C   s   | j  | _| j| j d S )N)r5   r(   
_lock_file)r   r   r   r   	__enter__L   s    
zReentrantFileLock.__enter__c             C   s   | j | j d S )N)_releaser(   )r   exc_typeexc_valexc_tbr   r   r   __exit__P   s    zReentrantFileLock.__exit__Fc             C   sv   yt jt| j W n tk
r(   Y nX y|jd W n8 tk
rp   |rN tjd|j	 |j
  |j  Y nX d S )Ng-C6?z/lock file %s present, will block until released)r   r   r1   r   r   r   r   loggingdebugr   r    )r   r7   no_blockr   r   r   r:   S   s    zReentrantFileLock._lock_filec             C   s   | j   d S )N)r    )r7   r   r   r   r<   d   s    zReentrantFileLock._releasec             c   sD   | j |}z(z| j|| d V  W d | j| X W d | j| X d S )N)r5   r:   r<   r8   )r   r4   rC   r7   r   r   r   lock_for_keyh   s    

zReentrantFileLock.lock_for_keyN)r0   )F)F)r#   r$   r%   r   r,   r.   r/   r5   staticmethodr8   r9   r;   r@   r:   r<   r   rD   r   r   r   r   r'   +   s   

r'   r   )r   r'   )__doc__
__future__r   r   rA   r   
contextlibr   	threadingr   r   Zfilelockr   r   Zvirtualenv.util.pathr	   r
   r3   r2   objectr'   __all__r   r   r   r   <module>   s   K 