
    Zc                        d dl Z d dlZd dlmZ d dlZ	 d dlmZ n# e$ r	 d dlmZ Y nw xY wdgZ	 d dl	Z	dZ
d Zd Zd	 Zn# e$ r 	 d dlZd dlZd dlZ ej        d
d          Zej        Zej        j        e_        ej        j        gej        j        gdz  z   e_        ej        Zej        j        e_        ej        j        gej        j        gdz  z   e_        dZ
d Zd Zn# e$ r  ed          w xY wY nw xY w ej                    Z ej                    Z d Z!d Z" G d de#          Z$d Z% G d de&          Z' G d de&          Z( G d de&          Z) G d de&          Z*dS )    N)sleep)	monotonic)time	lock_fileTc                 h    t          j        |                                 t           j                   d S N)fcntlflockfilenoLOCK_EXfile_s    /lib/python3.11/site-packages/locket/__init__.py_lock_file_blockingr   3   $    ELLNNEM22222    c                     	 t          j        |                                 t           j        t           j        z             dS # t
          $ r+}|j        t          j        t          j        fv rY d }~dS  d }~ww xY w)NTF)	r	   r
   r   r   LOCK_NBIOErrorerrnoEACCESEAGAIN)r   errors     r   _lock_file_non_blockingr   6   sv    	K(EFFF4 	 	 	{u|U\:: uuuuu		s   >A 
A7A21A22A7c                 h    t          j        |                                 t           j                   d S r   )r	   r
   r   LOCK_UNr   s    r   _unlock_filer   @   r   r   kernel32)use_last_error   Fc                     t          t          j        |                                           dddd          }|rdS t	          j                    }|dk    rt	          j        |          dS )Nr      T!   F)_WinAPI_LockFilemsvcrtget_osfhandler   ctypesget_last_errorWinError)r   reserrs      r   r   r   #   sg    "6#7#G#GAqRSTTC t+--"9 / /#...ur   c                 t    t          t          j        |                                           dddd           d S )Nr   r"   )_WinAPI_UnlockFiler%   r&   r   r   s    r   r   r   .   s1    v3ELLNNCCQ1aPPPPPr   z?Platform not supported (failed to import fcntl, ctypes, msvcrt)c                 *   t                                            	 t                              |           }|t	          |           }|t          | <   t                                            n# t                                            w xY wt          |fi |S r   )_locks_lockacquire_locksget_create_lock_filerelease_Locker)pathkwargslocks      r   r   r   H   s    zz$ 	 $T**DF4L4""6"""s   5A* *Bc                 `    t          |           }t          |           }t          ||g          S r   )_ThreadLock	_LockFile_LockSet)r6   thread_lock	file_locks      r   r3   r3   T   s-    d##K$I[),---r   c                       e Zd ZdS )	LockErrorN)__name__
__module____qualname__ r   r   r@   r@   Z   s        Dr   r@   c                     |d}t                      }	  |             }|rd S |7t                      |z
  |k    r"t          d                    |                    t          |           W)Ng?TzCouldn't lock {0})get_timer@   formatr   )r0   timeoutretry_periodr6   
start_timesuccesss         r   _acquire_non_blockingrL   ^   s     J ')) 	 F 	 

Z''1	 /66t<<===, r   c                        e Zd Zd Zd Zd ZdS )r<   c                     || _         d S r   )r1   )selflockss     r   __init__z_LockSet.__init__o   s    r   c                     g }	 | j         D ]-}|                    ||           |                    |           .d S #  t          |          D ]}|                                  xY wr   )r1   r0   appendreversedr4   )rO   rH   rI   acquired_locksr8   acquired_locks         r   r0   z_LockSet.acquirer   s    	 , ,Wl333%%d++++, ,	!).!9!9 ( (%%''''s	   5; )A$c                 \    t          | j                  D ]}|                                 d S r   )rT   r1   r4   )rO   r8   s     r   r4   z_LockSet.release~   s4    T[)) 	 	DLLNNNN	 	r   NrA   rB   rC   rQ   r0   r4   rD   r   r   r<   r<   n   sA          
 
 
    r   r<   c                   "    e Zd Zd ZddZd ZdS )r:   c                 D    || _         t          j                    | _        d S r   )_path	threadingLock_lockrO   r6   s     r   rQ   z_ThreadLock.__init__   s    
^%%


r   Nc                 x     | j                                          d S t           fd|| j                   d S )Nc                  8     j                             d          S )NF)r^   r0   rO   s   r   <lambda>z%_ThreadLock.acquire.<locals>.<lambda>   s    
 2 25 9 9 r   r0   rH   rI   r6   )r^   r0   rL   r[   )rO   rH   rI   s   `  r   r0   z_ThreadLock.acquire   s]     	J     !9999)Z	     r   c                 8    | j                                          d S r   r^   r4   rb   s    r   r4   z_ThreadLock.release       
r   NNrX   rD   r   r   r:   r:      sF        & & &	 	 	 	    r   r:   c                   "    e Zd Zd ZddZd ZdS )r;   c                 "    || _         d | _        d S r   )r[   _filer_   s     r   rQ   z_LockFile.__init__   s    



r   Nc                     t          | j        d          	 |t          rt                     nt	          fd||| j                   | _        d S #                                    xY w)Nwbc                  "    t                     S r   )r   )fileobjs   r   rc   z#_LockFile.acquire.<locals>.<lambda>   s    $;G$D$D r   rd   )openr[   _lock_file_blocking_availabler   rL   rk   close)rO   rH   rI   ro   s      @r   r0   z_LockFile.acquire   s    tz4((	! #@ #G,,,,%DDDD#!-	    !DJJJ	MMOOOs   4A A,c                     | j         t          d          t          | j                    | j                                          d | _         d S )Nzcannot release unlocked lock)rk   r@   r   rr   rb   s    r   r4   z_LockFile.release   sJ    : 	<:;;;TZ   



r   rh   rX   rD   r   r   r;   r;      sF          ! ! ! !*    r   r;   c                   2    e Zd ZdZddZd Zd Zd Zd ZdS )	r5   zg
    A lock wrapper to always apply the given *timeout* and *retry_period*
    to acquire() calls.
    Nc                 0    || _         || _        || _        d S r   )r^   _timeout_retry_period)rO   r8   rH   rI   s       r   rQ   z_Locker.__init__   s    
)r   c                 P    | j                             | j        | j                   d S r   )r^   r0   rv   rw   rb   s    r   r0   z_Locker.acquire   s%    
4=$*<=====r   c                 8    | j                                          d S r   rf   rb   s    r   r4   z_Locker.release   rg   r   c                 .    |                                   | S r   )r0   rb   s    r   	__enter__z_Locker.__enter__   s    r   c                 .    |                                   d S r   )r4   )rO   argss     r   __exit__z_Locker.__exit__   s    r   rh   )	rA   rB   rC   __doc__rQ   r0   r4   r{   r~   rD   r   r   r5   r5      sn         * * * *
> > >        r   r5   )+r   r\   r   r   weakrefr   rF   ImportError__all__r	   rq   r   r   r   r'   ctypes.wintypesr%   WinDLL	_kernel32LockFiler$   wintypesBOOLrestypeHANDLEDWORDargtypes
UnlockFiler-   r]   r/   WeakValueDictionaryr1   r   r3   	Exceptionr@   rL   objectr<   r:   r;   r5   rD   r   r   <module>r      s?              &******* & & &%%%%%%%%& -33LLLF %)!3 3 3  3 3 3 3a  Q Q QQ "FM*TBBB	$-#)?#7 %+_%;$<@U?VYZ?Z$Z!&1%+_%9"'-'=&>&/BWAX[\A\&\#(-%		 		 			Q 	Q 	Q 	Q3  ] ] ]k[\\\]2	Q 	Q=Qh in	$	$	&	&	# 	# 	#. . .	 	 	 	 		 	 	 	          v   ,    &   (               F    f     s6    ))A   C:C#BC:#C44C:9C: