gdZddlmZddlZddlZddlmZmZddlm Z m Z ddl m Z ddl mZmZddlmZmZej&eZGd d eZiZeZGd d eZGd deZGddeZgdZy)z8holds locking functionality that works across processes.) annotationsN)ABCabstractmethod)contextmanagersuppress)Path)LockRLock)FileLockTimeoutc8eZdZdfd Zdfd Zdfd ZxZS)_CountedFileLockc>tjj|}tjj|s-t t 5tj |dddt|!|d|_ t|_ y#1swY/xYwNr) ospathdirnameisdirrOSErrormakedirssuper__init__countr thread_safe)self lock_fileparent __class__s C/opt/hc_python/lib/python3.12/site-packages/virtualenv/util/lock.pyrz_CountedFileLock.__init__sg+ww}}V$'" F## #  7 #"s BBc|jj|dn|st|j|jdk(rt ||||xjdz c_y)N)timeoutr)racquirer rrr)rr" poll_intervalrs rr$z_CountedFileLock.acquiresU''go7'S$..) ) ::? GOG] 3 a c|j5|jdkDr|jj|jdk(rt| |t |jdz d|_dddy#1swYyxYw)Nrr#)force)rrreleasermax)rr(rs rr)z_CountedFileLock.release#sd   zzA~  ((*zzQe,TZZ!^Q/DJ   s A'A>>BreturnNone)Ng?F)__name__ __module__ __qualname__rr$r) __classcell__rs@rrrs#00r&rcxeZdZd dZd dZdZedZedZee d dZ ee dZ y) PathLockBasectt|}|jr|j|_y||_yN)rexistsresolver)rfolderrs rrzPathLockBase.__init__1s&F|&*kkmDLLN  r&cN|jjd|jdS)N())rr/rrs r__repr__zPathLockBase.__repr__5s$..))*!DII;a88r&c>t||j|z Sr7)typer)rothers r __truediv__zPathLockBase.__truediv__8stDz$))e+,,r&ctr7NotImplementedErrorr>s r __enter__zPathLockBase.__enter__;!!r&ctr7rErexc_typeexc_valexc_tbs r__exit__zPathLockBase.__exit__?rHr&ctr7rErnameno_blocks r lock_for_keyzPathLockBase.lock_for_keyC "!r&ctr7rErrQs rnon_reentrant_lock_for_keyz'PathLockBase.non_reentrant_lock_for_keyHrTr&Nr+)r,strr.) r/r0r1rr?rCrrGrNrrSrWr&rr5r50sq>9-""""""""r&r5ceZdZd fd Zd dZedZd dZdZdZ d dZ edZ e d d Z e d ZxZS)ReentrantFileLockc2t||d|_yr7)rr_lock)rr:rs rrzReentrantFileLock.__init__Os   r&ct|j|dz }t5|tvrt |t|<t|cdddS#1swYyxYwNz.lock)rXr _store_lock _lock_storer)rrQrs r _create_lockzReentrantFileLock._create_lockSsG tfEN23  +)9))D I&y)[[s #AAc|Tt5|j5|jdk(r tj |j dddddddyy#1swYxYw#1swYyxYwr)r`rrrapoprlocks r _del_lockzReentrantFileLock._del_lockZsJ  d..::?OODNND9/ ..s" A$0AA$A! A$$A-c:|j|jyr7)rgr]r>s r__del__zReentrantFileLock.__del__as tzz"r&cd|j|_|j|jyr7)rbr] _lock_filer>s rrGzReentrantFileLock.__enter__ds"&&(   #r&c~|j|j|j|jd|_yr7)_releaser]rgrJs rrNzReentrantFileLock.__exit__hs) djj! tzz" r&cdtt5tjt |j ddd |j dy#1swYxYw#t$rF|rtjd|j|j|j YywxYw)Ng-C6?z/lock file %s present, will block until released) rrrrrXrr$r LOGGERdebugrr))rrfrRs rrkzReentrantFileLock._lock_filemszg  KKDII '  LL     LLJDNN [ LLN LLN  s)AA A A B/.B/c$|jyr7)r)res rrmzReentrantFileLock._release}s  r&c#K|j|} |j||d|j| |j|d}y#|j|wxYw#|j|d}wxYwwr7)rbrkrmrg)rrQrRrfs rrSzReentrantFileLock.lock_for_keyso  &  $h/ d# NN4 D d# NN4 Ds,BAA(BA%%A((A==Bc#Ktt|j|dz 5ddddy#1swYyxYwwr_)rrXrrVs rrWz,ReentrantFileLock.non_reentrant_lock_for_keys0 c$))en"<= > ? > >s%A5 A>Ar+)r.)r/r0r1rrb staticmethodrgrirGrNrkrmrrSrWr2r3s@rr[r[Nsq*:: #$    r&r[c:eZdZdZdZeddZedZy) NoOpFileLockctr7rEr>s rrGzNoOpFileLock.__enter__!!r&ctr7rErJs rrNzNoOpFileLock.__exit__ryr&c#Kdywr7rYrPs rrSzNoOpFileLock.lock_for_key  c#Kdywr7rYrVs rrWz'NoOpFileLock.non_reentrant_lock_for_keyr|r}Nr.)r/r0r1rGrNrrSrWrYr&rrwrws4""r&rw)rwr[r )__doc__ __future__rloggingrabcrr contextlibrrpathlibr threadingr r filelockr r getLoggerr/rorrar`r5r[rw__all__rYr&rrsz>" #/!&   8 $0x06 f "3"