
    Mi*                    8   S r SSKJr  SSKrSSKrSSKJrJr  SSKJ	r	J
r
  SSKJr  SSKJrJr  SSKJr  SS	KJrJr  \(       a  SS
KJr  SSKJr  \R2                  " \5      r " S S\5      r0 r\" 5       r " S S\5      r " S S\5      r  " S S\5      r!/ SQr"g)z8holds locking functionality that works across processes.    )annotationsN)ABCabstractmethod)contextmanagersuppress)Path)LockRLock)TYPE_CHECKING)FileLockTimeout)Iterator)TracebackTypec                  b   ^  \ rS rSrSU 4S jjr  S     SU 4S jjjrS	S
U 4S jjjrSrU =r$ )_CountedFileLock   c                
  > [         R                  R                  U5      n[        [        5         [         R
                  " USS9  S S S 5        [        TU ]  U5        SU l        [        5       U l
        g ! , (       d  f       N4= f)NTexist_okr   )ospathdirnamer   OSErrormakedirssuper__init__countr
   thread_safe)self	lock_fileparent	__class__s      n/var/www/eduai.edurigo.com/storigo/production/storigo_env/lib/python3.13/site-packages/virtualenv/util/lock.pyr   _CountedFileLock.__init__   sY    +gKK.  	#
 7 s   A44
Bc                2  > U R                   R                  Uc  SOUS9(       d  [        U R                  5      eU R                  S:X  a   [
        TU ]  X5        U =R                  S-  sl        g ! [         a    U R                   R                  5         e f = f)N)timeoutr      )r   acquirer   r    r   r   BaseExceptionrelease)r   r'   poll_intervalr"   s      r#   r)   _CountedFileLock.acquire    s    
 ''go7'S$..))::?7 	

a
 !   ((*s   A0 0&Bc                *  > U R                      U R                  S:  a\  U R                  S:X  a  [        TU ]  US9  U =R                  S-  sl        U R                  S:X  a  U R                   R                  5         S S S 5        g ! , (       d  f       g = f)Nr   r(   )force)r   r   r   r+   )r   r/   r"   s     r#   r+   _CountedFileLock.release/   sf    zzA~::?GO%O0

a
::?$$,,. s   A-B
B)r   r   )r    strreturnNone)Ng?)r'   zfloat | Noner,   floatr2   r3   F)r/   boolr2   r3   )	__name__
__module____qualname____firstlineno__r   r)   r+   __static_attributes____classcell__r"   s   @r#   r   r      s@    # !%#  
	 / /    r   c                      \ rS rSrSS jrSS jrSS jr\SS j5       r\        SS j5       r	\\
SSS jj5       5       r\\
SS j5       5       rS	rg
)PathLockBase>   c                ~    [        U5      nUR                  5       (       a  UR                  5       U l        g UU l        g N)r   existsresolver   )r   folderr   s      r#   r   PathLockBase.__init__?   s(    F|&*kkmmDLLN		r>   c                N    U R                   R                   SU R                   S3$ )N())r"   r7   r   r   s    r#   __repr__PathLockBase.__repr__C   s$    ..))*!DII;a88r>   c                >    [        U 5      " U R                  U-  5      $ rC   )typer   )r   others     r#   __truediv__PathLockBase.__truediv__F   s    Dz$))e+,,r>   c                    [         erC   NotImplementedErrorrK   s    r#   	__enter__PathLockBase.__enter__I   s    !!r>   c                    [         erC   rT   r   exc_typeexc_valexc_tbs       r#   __exit__PathLockBase.__exit__M   s
     "!r>   c                    [         erC   rT   r   nameno_blocks      r#   lock_for_keyPathLockBase.lock_for_keyS   
     "!r>   c                    [         erC   rT   r   ra   s     r#   non_reentrant_lock_for_key'PathLockBase.non_reentrant_lock_for_keyX   re   r>   )r   NrF   z
str | Pathr2   r3   )r2   r1   )rP   r1   r2   r@   r2   r3   rZ   ztype[BaseException] | Noner[   zBaseException | Noner\   zTracebackType | Noner2   r3   r5   ra   r1   rb   r6   r2   Iterator[None]ra   r1   r2   rn   )r7   r8   r9   r:   r   rL   rQ   r   rV   r]   r   rc   rh   r;    r>   r#   r@   r@   >   s    >9- " " "2"=Q"[o"	" "
 "  " "  "r>   r@   c                     ^  \ rS rSrSU 4S jjrSSS jjr\SS j5       rSS jrSS jr	        SS jr
SSS jjr\SS	 j5       r\SSS
 jj5       r\SS j5       rSrU =r$ )ReentrantFileLock^   c                2   > [         TU ]  U5        S U l        g rC   )r   r   _lock)r   rF   r"   s     r#   r   ReentrantFileLock.__init___   s     
r>   c                    [        U R                  U S3-  5      n[           U[        ;  a  [	        U5      [        U'   [        U   sS S S 5        $ ! , (       d  f       g = fNz.lock)r1   r   _store_lock_lock_storer   )r   ra   r    s      r#   _create_lockReentrantFileLock._create_lockc   sG    		tfEN23	+)9))DI&y) [[s   %A
Ac                    U bU  [            U R                     U R                  S:X  a   [        R	                  U R
                  S 5        S S S 5        S S S 5        g g ! , (       d  f       N= f! , (       d  f       g = f)Nr   )ry   r   r   rz   popr    locks    r#   	_del_lockReentrantFileLock._del_lockj   sJ    d..::?OODNND9 / ..s"   A+1AA+
A(	$A++
A9c                :    U R                  U R                  5        g rC   )r   ru   rK   s    r#   __del__ReentrantFileLock.__del__q   s    tzz"r>   c                d    U R                  5       U l        U R                  U R                  5        g rC   )r{   ru   
_lock_filerK   s    r#   rV   ReentrantFileLock.__enter__t   s"    &&(


#r>   c                ~    U R                  U R                  5        U R                  U R                  5        S U l        g rC   )_releaseru   r   rY   s       r#   r]   ReentrantFileLock.__exit__x   s+     	djj!tzz"
r>   c                z   [        [        5         [        R                  " [	        U R
                  5      SS9  S S S 5         UR                  S5        g ! , (       d  f       N!= f! [         aK    U(       a  e [        R                  SUR                  5        UR                  5         UR                  5          g f = f)NTr   g-C6?z/lock file %s present, will block until released)r   r   r   r   r1   r   r)   r   LOGGERdebugr    r+   )r   r   rb   s      r#   r   ReentrantFileLock._lock_file   s|     gKKDII6 	LL 	 
  	LLJDNN[LLNLLN	s   )AA% 
A"%AB:9B:c                $    U R                  5         g rC   )r+   r   s    r#   r   ReentrantFileLock._release   s    r>   c              #    #    U R                  U5      n  U R                  X25        S v   U R                  U5         U R                  U5        S ng ! U R                  U5        f = f! U R                  U5        S nf = f7frC   )r{   r   r   r   )r   ra   rb   r   s       r#   rc   ReentrantFileLock.lock_for_key   sl       &	$/d#NN4 D d#NN4 Ds,   A?A A' A?A$$A' 'A<<A?c              #     #    [        [        U R                  U S3-  5      5         S v   S S S 5        g ! , (       d  f       g = f7frx   )r   r1   r   rg   s     r#   rh   ,ReentrantFileLock.non_reentrant_lock_for_key   s/     c$))en"<=> ?>>s   %A5	A
AA)ru   rj   ) )ra   r1   r2   r   )r   z_CountedFileLock | Noner2   r3   rk   rl   r5   )r   r   rb   r6   r2   r3   )r   r   r2   r3   rm   ro   )r7   r8   r9   r:   r   r{   staticmethodr   r   rV   r]   r   r   r   rc   rh   r;   r<   r=   s   @r#   rr   rr   ^   s    * : :#$2=Q[o	    
 
  r>   rr   c                  d    \ rS rSrSS jr        S	S jr\S
SS jj5       r\SS j5       rSr	g)NoOpFileLock   c                    [         erC   rT   rK   s    r#   rV   NoOpFileLock.__enter__   s    !!r>   c                    [         erC   rT   rY   s       r#   r]   NoOpFileLock.__exit__   re   r>   c              #     #    S v   g 7frC   rp   r`   s      r#   rc   NoOpFileLock.lock_for_key           c              #     #    S v   g 7frC   rp   rg   s     r#   rh   'NoOpFileLock.non_reentrant_lock_for_key   r   r   rp   Nrk   rl   r5   rm   ro   )
r7   r8   r9   r:   rV   r]   r   rc   rh   r;   rp   r>   r#   r   r      sT    ""2"=Q"[o"	"
    r>   r   )r   rr   r   )#__doc__
__future__r   loggingr   abcr   r   
contextlibr   r   pathlibr   	threadingr	   r
   typingr   filelockr   r   collections.abcr   typesr   	getLoggerr7   r   r   rz   ry   r@   rr   r   __all__rp   r>   r#   <module>r      s    > "  	 # /  !   &(#			8	$!/x !/H f"3 "@E EP< $r>   