
    .Ph                    "   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j        e          Z G d	 d
e          Zi Z e            Z G d de          Z G d de          Z G 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                  8     e Zd Zd	 fdZd
 fd	Zd fd	Z xZS )_CountedFileLockreturnNonec                z   t           j                            |          }t           j                            |          s@t	          t
                    5  t          j        |           d d d            n# 1 swxY w Y   t                                          |           d| _	        t                      | _        d S Nr   )ospathdirnameisdirr   OSErrormakedirssuper__init__countr
   thread_safe)self	lock_fileparent	__class__s      T/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/virtualenv/util/lock.pyr   z_CountedFileLock.__init__   s    ++w}}V$$ 	$'"" $ $F###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 	###
 77s   A55A9<A9N皙?c                    | j                             |dn|          st          | j                  | j        dk    r"t                                          ||           | xj        dz  c_        d S )N)timeoutr      )r   acquirer   r   r   r   )r   r%   poll_intervalr    s      r!   r'   z_CountedFileLock.acquire   sm    ''go7'SS 	*$.))):??GGOOG]333

a



    Fc                $   | j         5  | j        dk    r| j                                          | j        dk    r"t                                          |           t	          | j        dz
  d          | _        d d d            d S # 1 swxY w Y   d S )Nr   r&   )force)r   r   releaser   max)r   r+   r    s     r!   r,   z_CountedFileLock.release#   s     	0 	0zA~~ ((***zQe,,,TZ!^Q//DJ	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s   A/BB	B	r   r   )Nr"   F)__name__
__module____qualname__r   r'   r,   __classcell__r    s   @r!   r   r      sy        # # # # # #     0 0 0 0 0 0 0 0 0 0r)   r   c                      e Zd ZddZddZd Zed             Zed             Zee	dd
                        Z
ee	d                         ZdS )PathLockBaser   r   c                    t          |          }|                                r|                                n|| _        d S N)r   existsresolver   )r   folderr   s      r!   r   zPathLockBase.__init__1   s1    F||&*kkmm=DLLNNN			r)   strc                0    | j         j         d| j         dS )N())r    r0   r   r   s    r!   __repr__zPathLockBase.__repr__5   s     .)88DI8888r)   c                B     t          |           | j        |z            S r8   )typer   )r   others     r!   __truediv__zPathLockBase.__truediv__8   s    tDzz$)e+,,,r)   c                    t           r8   NotImplementedErrorr@   s    r!   	__enter__zPathLockBase.__enter__;       !!r)   c                    t           r8   rG   r   exc_typeexc_valexc_tbs       r!   __exit__zPathLockBase.__exit__?   rJ   r)   Fc                    t           r8   rG   r   nameno_blocks      r!   lock_for_keyzPathLockBase.lock_for_keyC   
     "!r)   c                    t           r8   rG   r   rS   s     r!   non_reentrant_lock_for_keyz'PathLockBase.non_reentrant_lock_for_keyH   rV   r)   Nr.   )r   r<   r/   )r0   r1   r2   r   rA   rE   r   rI   rP   r   rU   rY    r)   r!   r6   r6   0   s        > > > >9 9 9 9- - - " " ^" " " ^" " " " ^ ^" " " ^ ^" " "r)   r6   c                       e Zd Zd fdZddZed             ZddZd Zd	 Z	ddZ
ed             Zedd            Zed             Z xZS )ReentrantFileLockr   r   c                X    t                                          |           d | _        d S r8   )r   r   _lock)r   r;   r    s     r!   r   zReentrantFileLock.__init__O   s&       


r)    c                    t          | j        | dz            }t          5  |t          vrt	          |          t          |<   t          |         cd d d            S # 1 swxY w Y   d S Nz.lock)r<   r   _store_lock_lock_storer   )r   rS   r   s      r!   _create_lockzReentrantFileLock._create_lockS   s    	tNNN233	 	* 	*++)9))D)DI&y)	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s   -AA #A c                    | lt           5  | j        5  | j        dk    r t                              | j        d            d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S d S r   )rb   r   r   rc   popr   locks    r!   	_del_lockzReentrantFileLock._del_lockZ   s     : :d. : ::??OODND999: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : s3   A",A
A"
A	A"A	A""A&)A&c                :    |                      | j                   d S r8   )ri   r^   r@   s    r!   __del__zReentrantFileLock.__del__a   s    tz"""""r)   c                l    |                                  | _        |                     | j                   d S r8   )rd   r^   
_lock_filer@   s    r!   rI   zReentrantFileLock.__enter__d   s/    &&((

#####r)   c                |    |                      | j                   |                     | j                   d | _        d S r8   )_releaser^   ri   rL   s       r!   rP   zReentrantFileLock.__exit__h   s5    dj!!!tz"""


r)   Fc                   t          t                    5  t          j        t	          | j                             d d d            n# 1 swxY w Y   	 |                    d           d S # t          $ rO |r t          	                    d|j
                   |                                 |                                 Y d S w xY w)Ng-C6?z/lock file %s present, will block until released)r   r   r   r   r<   r   r'   r   LOGGERdebugr   r,   )r   rh   rT   s      r!   rm   zReentrantFileLock._lock_filem   s     g 	( 	(KDI'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(	LL      	 	 	 LLJDN[[[LLNNNLLNNNNNN	s$   'AAAA+ +ACCc                .    |                                   d S r8   )r,   rg   s    r!   ro   zReentrantFileLock._release}   s    r)   c              #  4  K   |                      |          }	 	 |                     ||           d V  |                     |           n# |                     |           w xY w	 |                     |           d }d S # |                     |           d }w xY wr8   )rd   rm   ro   ri   )r   rS   rT   rh   s       r!   rU   zReentrantFileLock.lock_for_key   s        &&	$h///d####d#####NN4   DDD NN4   DKKKKs   A
 A> 
A!!A> >Bc              #     K   t          t          | j        | dz                      5  d V  d d d            d S # 1 swxY w Y   d S ra   )r   r<   r   rX   s     r!   rY   z,ReentrantFileLock.non_reentrant_lock_for_key   s      c$)nnn"<==>> 	 	EEE	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   <A A r.   )r_   r/   )r0   r1   r2   r   rd   staticmethodri   rk   rI   rP   rm   ro   r   rU   rY   r3   r4   s   @r!   r\   r\   N   s            * * * * : : \:# # # #$ $ $  
       \ 
 
 
 ^
   ^    r)   r\   c                  H    e Zd Zd Zd Zedd            Zed             ZdS )NoOpFileLockc                    t           r8   rG   r@   s    r!   rI   zNoOpFileLock.__enter__       !!r)   c                    t           r8   rG   rL   s       r!   rP   zNoOpFileLock.__exit__   rz   r)   Fc              #     K   d V  d S r8   rZ   rR   s      r!   rU   zNoOpFileLock.lock_for_key         r)   c              #     K   d V  d S r8   rZ   rX   s     r!   rY   z'NoOpFileLock.non_reentrant_lock_for_key   r}   r)   Nr/   )r0   r1   r2   rI   rP   r   rU   rY   rZ   r)   r!   rx   rx      sm        " " "" " "    ^   ^  r)   rx   )rx   r\   r   )__doc__
__future__r   loggingr   abcr   r   
contextlibr   r   pathlibr   	threadingr	   r
   filelockr   r   	getLoggerr0   rq   r   rc   rb   r6   r\   rx   __all__rZ   r)   r!   <module>r      s   > > " " " " " "  				 # # # # # # # # / / / / / / / /       ! ! ! ! ! ! ! ! & & & & & & & &		8	$	$0 0 0 0 0x 0 0 06 dff" " " " "3 " " "<C C C C C C C CL    <      r)   