
    d                       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  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)ABCMeta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      X/home/feoh/.local/pipx/venvs/poetry/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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__/   s1    F||&*kkmm=DLLNNN			r)   strc                0    | j         j         d| j         dS )N())r    r0   r   r   s    r!   __repr__zPathLockBase.__repr__3   s     .)88DI8888r)   c                B     t          |           | j        |z            S r8   )typer   r   others     r!   __div__zPathLockBase.__div__6   s    tDzz$)e+,,,r)   c                ,    |                      |          S r8   )rF   rD   s     r!   __truediv__zPathLockBase.__truediv__9   s    ||E"""r)   c                    t           r8   NotImplementedErrorr@   s    r!   	__enter__zPathLockBase.__enter__<       !!r)   c                    t           r8   rJ   r   exc_typeexc_valexc_tbs       r!   __exit__zPathLockBase.__exit__@   rM   r)   Fc                    t           r8   rJ   r   nameno_blocks      r!   lock_for_keyzPathLockBase.lock_for_keyD   
     "!r)   c                    t           r8   rJ   r   rV   s     r!   non_reentrant_lock_for_keyz'PathLockBase.non_reentrant_lock_for_keyI   rY   r)   Nr.   )r   r<   r/   )r0   r1   r2   r   rA   rF   rH   r   rL   rS   r   rX   r\    r)   r!   r6   r6   .   s        > > > >9 9 9 9- - -# # # " " ^" " " ^" " " " ^ ^" " " ^ ^" " "r)   r6   )	metaclassc                       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__P   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   rV   r   s      r!   _create_lockzReentrantFileLock._create_lockT   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   )rf   r   r   rg   popr   locks    r!   	_del_lockzReentrantFileLock._del_lock[   s     : :d. : ::??OODND999: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : s3   A",A
A"
A	A"A	A""A&)A&c                :    |                      | j                   d S r8   )rm   rb   r@   s    r!   __del__zReentrantFileLock.__del__b   s    tz"""""r)   c                l    |                                  | _        |                     | j                   d S r8   )rh   rb   
_lock_filer@   s    r!   rL   zReentrantFileLock.__enter__e   s/    &&((

#####r)   c                |    |                      | j                   |                     | j                   d | _        d S r8   )_releaserb   rm   rO   s       r!   rS   zReentrantFileLock.__exit__i   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          $ rI |r t          j	        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   loggingdebugr   r,   )r   rl   rW   s      r!   rq   zReentrantFileLock._lock_filen   s     g 	( 	(KDI'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(	LL      	 	 	 MKT^\\\LLNNNLLNNNNNN	s$   'AAAA+ +AB>=B>c                .    |                                   d S r8   )r,   rk   s    r!   rs   zReentrantFileLock._release~   s    r)   c              #  4  K   |                      |          }	 	 |                     ||           d V  |                     |           n# |                     |           w xY w	 |                     |           d }d S # |                     |           d }w xY wr8   )rh   rq   rs   rm   )r   rV   rW   rl   s       r!   rX   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 re   )r   r<   r   r[   s     r!   r\   z,ReentrantFileLock.non_reentrant_lock_for_key   s      c$)nnn"<==>> 	 	EEE	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   <A A r.   )rc   r/   )r0   r1   r2   r   rh   staticmethodrm   ro   rL   rS   rq   rs   r   rX   r\   r3   r4   s   @r!   r`   r`   O   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   rJ   r@   s    r!   rL   zNoOpFileLock.__enter__       !!r)   c                    t           r8   rJ   rO   s       r!   rS   zNoOpFileLock.__exit__   r~   r)   Fc              #     K   d V  d S r8   r]   rU   s      r!   rX   zNoOpFileLock.lock_for_key         r)   c              #     K   d V  d S r8   r]   r[   s     r!   r\   z'NoOpFileLock.non_reentrant_lock_for_key   r   r)   Nr/   )r0   r1   r2   rL   rS   r   rX   r\   r]   r)   r!   r|   r|      sm        " " "" " "    ^   ^  r)   r|   )r|   r`   r   )__doc__
__future__r   ru   r   abcr   r   
contextlibr   r   pathlibr   	threadingr	   r
   filelockr   r   r   rg   rf   r6   r`   r|   __all__r]   r)   r!   <module>r      s   > > " " " " " "  				 ' ' ' ' ' ' ' ' / / / / / / / /       ! ! ! ! ! ! ! ! & & & & & & & &0 0 0 0 0x 0 0 06 dff" " " " "W " " " "BC C C C C C C CL    <      r)   