
    Loj"                       % S SK Jr  S SKrS SKrS SKrS SKJr  S SKJrJ	r	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  S
r\R,                  S:X  a   " S S\5      rOZ S SKr\R2                  \R4                  \R6                  \R8                  4rSr\" \\	\15      rS\ S'   SS jr!SS jr" " S S\5      r\R,                  S:X  a  SS/r&g/ SQr&g! \#\$4 a    Sr%S\ S'   SS jr!SS jr" N@f = f)    )annotationsN)suppress)EACCESEAGAINENOSYSEWOULDBLOCK)Path)Finalcast   )BaseFileLock)ensure_directory_existsFwin32c                  ,    \ rS rSrSrSS jrSS jrSrg)UnixFileLock   zHUses the :func:`fcntl.flock` to hard lock the lock file on unix systems.c                    [         eNNotImplementedErrorselfs    H/mnt/workspace/venv-train/lib/python3.13/site-packages/filelock/_unix.py_acquireUnixFileLock._acquire       %%    c                    [         er   r   r   s    r   _releaseUnixFileLock._release   r   r    NreturnNone)__name__
__module____qualname____firstlineno____doc__r   r   __static_attributes__r!   r   r   r   r      s    V	&	&r   r   TzFinal[frozenset[int]]_CONTENTION_ERRNOSc                     [         R                  " U [         R                  [         R                  -  5        g! [         a  nUR
                  [        ;   a   S nAge S nAff = f)NFT)fcntlflockLOCK_EXLOCK_NBOSErrorerrnor+   )fd	exceptions     r   _lock_fd_nonblockingr5   .   sL    B =>
 	  ??&88 s   69 
A"AAA"c                N    [         R                  " U [         R                  5        g r   )r-   r.   LOCK_UN)r3   s    r   
_unlock_fdr8   9   s    KKEMM*r   zfcntl is unavailablez
Final[str]_FCNTL_UNAVAILABLEc                *    [        [        [        5      er   r1   r   r9   _fds    r   r5   r5   "       &"455r   c                *    [        [        [        5      er   r;   r<   s    r   r8   r8   %   r>   r   c                  ^    \ rS rSrSrSS jrSS jrSS jrSS jrSS jr	SS jr
SS	 jrS
rg)r   <   a  
Uses the :func:`fcntl.flock` to hard lock the lock file on unix systems.

We leave the lock file in place after release. Unlinking a locked file on Unix splits
waiters across inodes and breaks mutual exclusion for processes that coordinate via the
same path.
c                J    U R                  5       nUb  U R                  " U6   g g r   )_acquire_native_switch_to_soft_lock)r   missing_flocks     r   r   r   E   s)     002M())=9 )r   c                   [        U R                  5        [        R                  n[	        [        SS 5      =nb  X-  nU[        R
                  -  nU R                  5       n [        R                  " U R                  X5      nU R                  U5         [        U5      nU(       a  U R)                  U5        g U R%                  5         [        R&                  " U5        g ! [         aG    U R                  (       a4  [        U R                  5      R                  R                  5       (       a   g e [         as    [        U R                  5      R                  5       (       d  e  [        R                  " U R                  U[        R
                  ) -  U5      n GN! [         a      g f = ff = f! [         aH  nUR                   ["        :w  a'  U R%                  5         [        R&                  " U5        e XF4s S nA$ S nAff = f)N
O_NOFOLLOW)r   	lock_fileosO_RDWRgetattrO_CREAT
_open_modeopenFileNotFoundErrorr	   parentexistsPermissionError_mark_descriptor_pendingr5   r1   r2   r   _mark_descriptor_releasedclose_finalize_locked_fd)r   
open_flags
o_nofollow	open_moder3   lockedr4   s          r   rC   UnixFileLock._acquire_nativeJ   s   #DNN3 J%b,==
J(
"**$J)I WWT^^ZC" ))"-%-b1 ((,  ..0= %  >>d4>>&:&A&A&H&H&J&J"   DNN+2244 rzzk1I9UB(      %??f,224HHRL}$%sO   "!C  F/  AF,/3F,#4F
F($F,'F((F,/
H9=G<6H<Hc                   S n[        [        5         [        R                  " U5      =nR                  UR
                  4nS S S 5        U R                  5         [        R                  " U5        U R                  (       a  U R                  (       d  U R                  b  Ue[        [        5         [        R                  " U R                  5      nX5R                  UR
                  4:X  a#  [        U R                  5      R                  5         S S S 5        U R                  5         U R!                  5         g ! , (       d  f       N= f! , (       d  f       N@= fr   )r   r1   rI   fstatst_devst_inorT   rU   _fallback_to_soft_preserve_lock_file_on_acquiredlstatrH   r	   unlink_fallback_to_soft_lockr   )r   r3   rE   identityr]   currents         r   rD   !UnixFileLock._switch_to_soft_lockv   s     04H'"%'XXb\1E995<<G #**,HHRL))T-E-EIZIZIf $#'"((4>>2??(//1 # '')MMO #" #"s   /D7/AE7
E
Ec                   Sn [         R                  " U5      nUR                  S:w  a*  [         R                  " US5        U R	                  U5        SnU(       a(  U R                  XR                  UR                  45        g U R                  5         [         R                  " U5        g ! [
         a(    U R                  5         [         R                  " U5        e f = f)NFr   T)rI   r]   st_nlink	ftruncate_apply_explicit_moder1   rT   rU   _mark_descriptor_ownedr^   r_   )r   r3   keepstat_results       r   rV    UnixFileLock._finalize_locked_fd   s     D	 hhrl''1,LLQ'--b1D
 ++B1C1C[EWEW0XY..0  ..0s   AB* *2Cc                    U R                   (       aC  [        [        5         [        R                  " XR
                  R                  5        S S S 5        g g ! , (       d  f       g = fr   )has_explicit_moder   rR   rI   fchmod_contextmoder   r3   s     r   rl   !UnixFileLock._apply_explicit_mode   s=    %%o.IIb--"4"45 /. &..s   +A
A$c                    SSK Jn  [        R                  " SSS9  SSKJnJn  [        X5      (       a  X l        g UU l        g )Nr   )SoftFileLockzDflock not supported on this filesystem, falling back to SoftFileLock   )
stacklevel)AsyncSoftFileLockBaseAsyncFileLock)	_softry   warningswarnasyncior|   r}   
isinstance	__class__)r   ry   r|   r}   s       r   re   #UnixFileLock._fallback_to_soft_lock   s1     ,MM`mnoE2<T2U2U.N[gDNr   c                    [        SU R                  R                  5      n[        U5        U R	                  5         U R                  USS9  g )NintT)default_suppresses)r   rt   lock_file_fdr8   rT   _close_released_fdrv   s     r   r   r       s@    eT]]778B rN**,##B4#@r   )r   Nr"   )r#   ztuple[int, OSError] | None)r3   r   rE   r1   r#   r$   r3   r   r#   r$   )r%   r&   r'   r(   r)   r   rC   rD   rV   rl   re   r   r*   r!   r   r   r   r   <   s-    		:
*	X	&	*	6
	h	Ar   	has_fcntl)r   r5   r8   r   )r3   r   r#   boolr   )r=   r   r#   r   )r=   r   r#   r$   )'
__future__r   rI   sysr   
contextlibr   r2   r   r   r   r   pathlibr	   typingr
   r   _apir   _utilr   r   platformr   r-   r.   r/   r0   r7   _	frozensetr+   __annotations__r5   r8   ImportErrorAttributeErrorr9   __all__r!   r   r   <module>r      s    " 	 
   5 5    *	<<7&| &+[[%--F 	 5>vv{>[4\1\			+xA| xAv <<7{+GQGw ( 6)?J?	6	66s   2C C.-C.