o $"b@sdZddlmZmZddlZddlZddlmZmZddl m Z ddl m Z m Z ddlmZmZddlmZdd lmZGd d d eZiZe ZeeGd d d eZGdddeZGdddeZdZdS)z7holds locking functionality that works across processes)absolute_importunicode_literalsN)ABCMetaabstractmethod)contextmanager)LockRLock)FileLockTimeout) add_metaclass)Pathcs8eZdZfddZd fdd Zd fdd ZZS) _CountedFileLockcs\tj|}tj|szt|Wn tyYnwtt||d|_ t |_ dSNr) ospathdirnameisdirmakedirsOSErrorsuperr __init__countr thread_safe)self lock_fileparent __class__6/usr/lib/python3/dist-packages/virtualenv/util/lock.pyrs    z_CountedFileLock.__init__N皙?csV|j|jdkrtt||||jd7_WddS1s$wYdS)Nr)rrrr acquire)rtimeout poll_intervalrrrr"s  "z_CountedFileLock.acquireFcsZ|j |jdkrtt|j|dt|jdd|_WddS1s&wYdS)Nr!)forcer)rrrr releasemax)rr%rrrr&"s  "z_CountedFileLock.release)Nr F)__name__ __module__ __qualname__rr"r& __classcell__rrrrr s  r c@sfeZdZddZddZddZddZed d Zed d Z ee dddZ ee ddZ dS) PathLockBasecCs(t|}|r||_dS||_dSN)r existsresolver)rfolderrrrrr/s zPathLockBase.__init__cCsd|jj|jS)Nz{}({}))formatrr)rrrrr__repr__3zPathLockBase.__repr__cCst||j|Sr.)typerrotherrrr__div__6r5zPathLockBase.__div__cCs ||Sr.)r9r7rrr __truediv__9s zPathLockBase.__truediv__cCtr.NotImplementedErrorr3rrr __enter__<zPathLockBase.__enter__cCr;r.r<rexc_typeexc_valexc_tbrrr__exit__@r?zPathLockBase.__exit__FcCr;r.r<rnameno_blockrrr lock_for_keyDzPathLockBase.lock_for_keycCr;r.r<)rFrrrnon_reentrant_lock_for_keyIrIz'PathLockBase.non_reentrant_lock_for_keyNr() r)r*r+rr4r9r:rr>rDrrHrJrrrrr--s  r-cszeZdZfddZdddZeddZdd Zd d Zd d Z dddZ eddZ e dddZ e ddZZS)ReentrantFileLockcstt||d|_dSr.)rrKr_lock)rr1rrrrPs zReentrantFileLock.__init__cCsXt|jd|}t|tvrt|t|<t|WdS1s%wYdSNz{}.lock)strrr2 _store_lock _lock_storer )rrFrrrr _create_lockTs  $zReentrantFileLock._create_lockc Cs|dur@t0|j|jdkrt|jdWdn1s!wYWddSWddS1s9wYdSdSr)rPrrrQpoprlockrrr _del_lock[s "zReentrantFileLock._del_lockcCs||jdSr.)rVrLr3rrr__del__cszReentrantFileLock.__del__cCs||_||jdSr.)rRrL _lock_filer3rrrr>fs zReentrantFileLock.__enter__cCs"||j||jd|_dSr.)_releaserLrVr@rrrrDjs   zReentrantFileLock.__exit__FcCsrz tt|jWn tyYnwz|dWdSty8|r&td|j | |YdSw)Ng-C6?z/lock file %s present, will block until released) rrrOrrr"r loggingdebugrr&)rrUrGrrrrXos  zReentrantFileLock._lock_filecCs |dSr.)r&rTrrrrYs zReentrantFileLock._releasec cs`||}z!z|||dVW||n||wW||d}dS||d}wr.)rRrXrYrV)rrFrGrUrrrrHs    zReentrantFileLock.lock_for_keyccsFtt|jd| dVWddS1swYdSrN)r rOrr2rrFrrrrJs"z,ReentrantFileLock.non_reentrant_lock_for_key)rMr()r)r*r+rrR staticmethodrVrWr>rDrXrYrrHrJr,rrrrrKOs       rKc@s6eZdZddZddZed ddZedd Zd S) NoOpFileLockcCr;r.r<r3rrrr>zNoOpFileLock.__enter__cCr;r.r<r@rrrrDr_zNoOpFileLock.__exit__Fcc dVdSr.rrErrrrH zNoOpFileLock.lock_for_keyccr`r.rr\rrrrJraz'NoOpFileLock.non_reentrant_lock_for_keyNr()r)r*r+r>rDrrHrJrrrrr^s r^)r^rKr )__doc__ __future__rrrZrabcrr contextlibr threadingrrfilelockr r sixr virtualenv.util.pathr r rQrPobjectr-rKr^__all__rrrrs$   !H