
    wi                    "   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                @   t           j                            |          }t          t                    5  t          j        |d           d d d            n# 1 swxY w Y   t                                          |           d| _        t                      | _
        d S )NTexist_okr   )ospathdirnamer   OSErrormakedirssuper__init__countr
   thread_safe)self	lock_fileparent	__class__s      d/root/.openclaw/workspace/chatterbox_venv_py311/lib/python3.11/site-packages/virtualenv/util/lock.pyr   z_CountedFileLock.__init__   s    ++g 	/ 	/K....	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	###
 77s   AAAN皙?c                <   | j                             |dn|          st          | j                  | j        dk    rL	 t                                          ||           n(# t          $ r | j                                           w xY w| xj        dz  c_        d S )N)timeoutr      )r   acquirer   r   r   r   BaseExceptionrelease)r   r%   poll_intervalr    s      r!   r'   z_CountedFileLock.acquire   s    ''go7'SS 	*$.))):??7777     ((*** 	

a



s   "A$ $%B	Fc                    | j         5  | j        dk    ra| j        dk    r"t                                          |           | xj        dz  c_        | j        dk    r| j                                          d d d            d S # 1 swxY w Y   d S )Nr   r&   )force)r   r   r   r)   )r   r,   r    s     r!   r)   z_CountedFileLock.release&   s     	/ 	/zA~~:??GGOO%O000

a

:??$,,...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s   A-BB
Br   r   )Nr"   F)__name__
__module____qualname__r   r'   r)   __classcell__r    s   @r!   r   r      sy        # # # # # #	 	 	 	 	 	/ / / / / / / / / /    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__6   s1    F||&*kkmm=DLLNNN			r4   strc                0    | j         j         d| j         dS )N())r    r/   r   r   s    r!   __repr__zPathLockBase.__repr__:   s     .)88DI8888r4   c                B     t          |           | j        |z            S r8   )typer   )r   others     r!   __truediv__zPathLockBase.__truediv__=   s    tDzz$)e+,,,r4   c                    t           r8   NotImplementedErrorr@   s    r!   	__enter__zPathLockBase.__enter__@       !!r4   c                    t           r8   rG   r   exc_typeexc_valexc_tbs       r!   __exit__zPathLockBase.__exit__D   rJ   r4   Fc                    t           r8   rG   r   nameno_blocks      r!   lock_for_keyzPathLockBase.lock_for_keyH   
     "!r4   c                    t           r8   rG   r   rS   s     r!   non_reentrant_lock_for_keyz'PathLockBase.non_reentrant_lock_for_keyM   rV   r4   Nr-   )r   r<   r.   )r/   r0   r1   r   rA   rE   r   rI   rP   r   rU   rY    r4   r!   r6   r6   5   s        > > > >9 9 9 9- - - " " ^" " " ^" " " " ^ ^" " " ^ ^" " "r4   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__T   s&       


r4    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_lockX   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 )Nr   )rb   r   r   rc   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   )ri   r^   r@   s    r!   __del__zReentrantFileLock.__del__f   s    tz"""""r4   c                l    |                                  | _        |                     | j                   d S r8   )rd   r^   
_lock_filer@   s    r!   rI   zReentrantFileLock.__enter__i   s/    &&((

#####r4   c                |    |                      | j                   |                     | j                   d | _        d S r8   )_releaser^   ri   rL   s       r!   rP   zReentrantFileLock.__exit__m   s5    dj!!!tz"""


r4   Fc                   t          t                    5  t          j        t	          | j                  d           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)NTr   g-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_filer   s     g 	7 	7KDI6666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7	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    r4   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.   )r/   r0   r1   r   rd   staticmethodri   rk   rI   rP   rm   ro   r   rU   rY   r2   r3   s   @r!   r\   r\   S   s            * * * * : : \:# # # #$ $ $  
       \ 
 
 
 ^
   ^    r4   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__       !!r4   c                    t           r8   rG   rL   s       r!   rP   zNoOpFileLock.__exit__   rz   r4   Fc              #     K   d V  d S r8   rZ   rR   s      r!   rU   zNoOpFileLock.lock_for_key         r4   c              #     K   d V  d S r8   rZ   rX   s     r!   rY   z'NoOpFileLock.non_reentrant_lock_for_key   r}   r4   Nr.   )r/   r0   r1   rI   rP   r   rU   rY   rZ   r4   r!   rx   rx      sm        " " "" " "    ^   ^  r4   rx   )rx   r\   r   )__doc__
__future__r   loggingr   abcr   r   
contextlibr   r   pathlibr   	threadingr	   r
   filelockr   r   	getLoggerr/   rq   r   rc   rb   r6   r\   rx   __all__rZ   r4   r!   <module>r      s   > > " " " " " "  				 # # # # # # # # / / / / / / / /       ! ! ! ! ! ! ! ! & & & & & & & &		8	$	$/ / / / /x / / /@ dff" " " " "3 " " "<C C C C C C C CL    <      r4   