a qeg@sdZddlmZddlZddlZddlmZmZddlm Z m Z ddl m Z ddl mZmZddlmZmZeeZGd d d eZiZeZGd d d eZGd ddeZGdddeZgdZdS)z8holds locking functionality that works across processes.) annotationsN)ABCabstractmethod)contextmanagersuppress)Path)LockRLock)FileLockTimeoutcs>eZdZddfdd Zd fdd Zd fd d ZZS)_CountedFileLockNonereturncshtj|}tj|sJttt|Wdn1s@0Yt|d|_ t |_ dSNr) ospathdirnameisdirrOSErrormakedirssuper__init__countr thread_safe)self lock_fileparent __class__>/usr/local/lib/python3.9/site-packages/virtualenv/util/lock.pyrs   ( z_CountedFileLock.__init__N皙?csN|jj|durdn|ds$t|j|jdkrrCrrGrIr r r r!r/0s  r/cseZdZddfdd ZdddZedd Zddd d Zd d ZddZ dddZ eddZ e dddZ e ddZZS)ReentrantFileLockr rcst|d|_dSr0)rr_lock)rr3rr r!rOs zReentrantFileLock.__init__cCsXt|j|d}t,|tvr.t|t|<t|WdS1sJ0YdSNz.lock)r4r _store_lock _lock_storer )rrErr r r! _create_lockSs  zReentrantFileLock._create_lockc Csn|durjtN|j(|jdkr.t|jdWdn1sB0YWdn1s`0YdSr)rNrrrOpoprlockr r r! _del_lockZs zReentrantFileLock._del_lockcCs||jdSr0)rTrKr7r r r!__del__aszReentrantFileLock.__del__cCs||_||jdSr0)rPrK _lock_filer7r r r!r>ds zReentrantFileLock.__enter__cCs"||j||jd|_dSr0)_releaserKrTr?r r r!rChs  zReentrantFileLock.__exit__FcCstt tt|jWdn1s.0Yz|dWn6ty||rZt d|j | |Yn0dS)Ng-C6?z/lock file %s present, will block until released) rrrrr4rr&r LOGGERdebugrr))rrSrFr r r!rVms . zReentrantFileLock._lock_filecCs |dSr0)r)rRr r r!rW}szReentrantFileLock._releasec cs`||}z@z |||dVW||n ||0W||d}n||d}0dSr0)rPrVrWrT)rrErFrSr r r!rGs    zReentrantFileLock.lock_for_keyccsBtt|j|ddVWdn1s40YdSrM)r r4rrHr r r!rIsz,ReentrantFileLock.non_reentrant_lock_for_key)rL)F)F)r+r,r-rrP staticmethodrTrUr>rCrVrWrrGrIr.r r rr!rJNs     rJc@s6eZdZddZddZed ddZedd Zd S) NoOpFileLockcCstdSr0r<r7r r r!r>szNoOpFileLock.__enter__cCstdSr0r<r?r r r!rCszNoOpFileLock.__exit__Fccs dVdSr0r rDr r r!rGszNoOpFileLock.lock_for_keyccs dVdSr0r rHr r r!rIsz'NoOpFileLock.non_reentrant_lock_for_keyN)F)r+r,r-r>rCrrGrIr r r r!r[s  r[)r[rJr )__doc__ __future__rloggingrabcrr contextlibrrpathlibr threadingrr filelockr r getLoggerr+rXr rOrNr/rJr[__all__r r r r!s    F