o
    Uh                     @  s   d Z ddlmZ ddlZddlZddlmZmZ ddlm	Z	m
Z
 ddlmZ ddlmZmZ ddlmZmZ eeZG d	d
 d
eZi Ze ZG dd deZG dd deZG dd deZg dZdS )z8holds locking functionality that works across processes.    )annotationsN)ABCabstractmethod)contextmanagersuppress)Path)LockRLock)FileLockTimeoutc                      s:   e Zd Zd fddZd fdd	Zd fd
d	Z  ZS )_CountedFileLockreturnNonec                   sh   t j|}t j|s%tt t | W d    n1 s w   Y  t | d| _	t
 | _d S Nr   )ospathdirnameisdirr   OSErrormakedirssuper__init__countr	   thread_safe)self	lock_fileparent	__class__ h/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/virtualenv/util/lock.pyr      s   
z_CountedFileLock.__init__N皙?c                   sN   | j j|d u r	dn|dst| j| jdkrt || |  jd7  _d S )N)timeoutr      )r   acquirer   r   r   r   )r   r#   poll_intervalr   r   r    r%      s
   

z_CountedFileLock.acquireFc                   sj   | j ( | jdkr| j   | jdkrt j|d t| jd d| _W d    d S 1 s.w   Y  d S )Nr   r$   )force)r   r   releaser   max)r   r'   r   r   r    r(   #   s   


"z_CountedFileLock.releaser   r   )Nr!   F)__name__
__module____qualname__r   r%   r(   __classcell__r   r   r   r    r      s    
r   c                   @  sb   e Zd ZdddZdddZdd	 Zed
d Zedd Zee	dddZ
ee	dd ZdS )PathLockBaser   r   c                 C  s(   t |}| r| | _d S || _d S N)r   existsresolver   )r   folderr   r   r   r    r   1   s    zPathLockBase.__init__strc                 C  s   | j j d| j dS )N())r   r,   r   r   r   r   r    __repr__5   s   zPathLockBase.__repr__c                 C  s   t | | j| S r1   )typer   )r   otherr   r   r    __truediv__8   s   zPathLockBase.__truediv__c                 C     t r1   NotImplementedErrorr8   r   r   r    	__enter__;      zPathLockBase.__enter__c                 C  r=   r1   r>   r   exc_typeexc_valexc_tbr   r   r    __exit__?   rA   zPathLockBase.__exit__Fc                 C  r=   r1   r>   r   nameno_blockr   r   r    lock_for_keyC      zPathLockBase.lock_for_keyc                 C  r=   r1   r>   r   rH   r   r   r    non_reentrant_lock_for_keyH   rK   z'PathLockBase.non_reentrant_lock_for_keyNr*   )r   r5   r+   )r,   r-   r.   r   r9   r<   r   r@   rF   r   rJ   rM   r   r   r   r    r0   0   s    



r0   c                      s~   e Zd Zd fddZdddZedd	 Zdd
dZdd Zdd Z	dddZ
edd ZedddZedd Z  ZS )ReentrantFileLockr   r   c                   s   t  | d | _d S r1   )r   r   _lock)r   r4   r   r   r    r   O   s   
zReentrantFileLock.__init__ c                 C  sX   t | j| d }t |tvrt|t|< t| W  d    S 1 s%w   Y  d S Nz.lock)r5   r   _store_lock_lock_storer   )r   rH   r   r   r   r    _create_lockS   s   $zReentrantFileLock._create_lockc              	   C  s   | d ur@t 0 | j | jdkrt| jd  W d    n1 s!w   Y  W d    d S W d    d S 1 s9w   Y  d S d S r   )rR   r   r   rS   popr   lockr   r   r    	_del_lockZ   s   
PzReentrantFileLock._del_lockc                 C  s   |  | j d S r1   )rX   rO   r8   r   r   r    __del__a   s   zReentrantFileLock.__del__c                 C  s   |   | _| | j d S r1   )rT   rO   
_lock_filer8   r   r   r    r@   d   s   
zReentrantFileLock.__enter__c                 C  s"   |  | j | | j d | _d S r1   )_releaserO   rX   rB   r   r   r    rF   h   s   
zReentrantFileLock.__exit__Fc                 C  s   t t tt| j W d    n1 sw   Y  z|d W d S  ty@   |r. t	d|j
 |  |  Y d S w )Ng-C6?z/lock file %s present, will block until released)r   r   r   r   r5   r   r%   r   LOGGERdebugr   r(   )r   rW   rI   r   r   r    rZ   m   s   
zReentrantFileLock._lock_filec                 C  s   |    d S r1   )r(   rV   r   r   r    r[   }   s   zReentrantFileLock._releasec              	   c  s`    |  |}z!z| || d V  W | | n| | w W | | d }d S | | d }w r1   )rT   rZ   r[   rX   )r   rH   rI   rW   r   r   r    rJ      s   


zReentrantFileLock.lock_for_keyc                 c  sF    t t| j| d  d V  W d    d S 1 sw   Y  d S rQ   )r   r5   r   rL   r   r   r    rM      s   "z,ReentrantFileLock.non_reentrant_lock_for_keyr*   )rP   r+   )r,   r-   r.   r   rT   staticmethodrX   rY   r@   rF   rZ   r[   r   rJ   rM   r/   r   r   r   r    rN   N   s    




rN   c                   @  s6   e Zd Zdd Zdd ZedddZedd	 Zd
S )NoOpFileLockc                 C  r=   r1   r>   r8   r   r   r    r@         zNoOpFileLock.__enter__c                 C  r=   r1   r>   rB   r   r   r    rF      r`   zNoOpFileLock.__exit__Fc                 c      d V  d S r1   r   rG   r   r   r    rJ         
zNoOpFileLock.lock_for_keyc                 c  ra   r1   r   rL   r   r   r    rM      rb   z'NoOpFileLock.non_reentrant_lock_for_keyNr+   )r,   r-   r.   r@   rF   r   rJ   rM   r   r   r   r    r_      s    r_   )r_   rN   r   )__doc__
__future__r   loggingr   abcr   r   
contextlibr   r   pathlibr   	threadingr   r	   filelockr
   r   	getLoggerr,   r\   r   rS   rR   r0   rN   r_   __all__r   r   r   r    <module>   s"    
F