
    ^j"                       U d dl mZ d dlZd dlZd dlZd dlmZ d dlmZm	Z	m
Z
mZ d dlmZ d dlmZmZ ddlmZ dd	lmZ d
Zej,                  dk(  r G d de      ZnX	 d dlZej2                  ej4                  ej6                  ej8                  fZdZ eee	eh      Zde d<   ddZ!ddZ" G d de      Zej,                  dk(  rddgZ&yg dZ&y# e#e$f$ r dZ%de d<   ddZ!ddZ"Y <w xY w)    )annotationsN)suppress)EACCESEAGAINENOSYSEWOULDBLOCK)Path)Finalcast   )BaseFileLock)ensure_directory_existsFwin32c                       e Zd ZdZddZddZy)UnixFileLockzHUses the :func:`fcntl.flock` to hard lock the lock file on unix systems.c                    t         NNotImplementedErrorselfs    Y/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/filelock/_unix.py_acquirezUnixFileLock._acquire       %%    c                    t         r   r   r   s    r   _releasezUnixFileLock._release   r   r   NreturnNone)__name__
__module____qualname____doc__r   r    r   r   r   r      s    V	&	&r   r   TzFinal[frozenset[int]]_CONTENTION_ERRNOSc                    	 t        j                  | t         j                  t         j                  z         y# t        $ r}|j
                  t        v rY d }~y d }~ww xY w)NFT)fcntlflockLOCK_EXLOCK_NBOSErrorerrnor&   )fd	exceptions     r   _lock_fd_nonblockingr0   .   sL    B =>
 	  ??&88 s   58 	AAAAc                L    t        j                  | t         j                         y r   )r(   r)   LOCK_UN)r.   s    r   
_unlock_fdr3   9   s    KKEMM*r   zfcntl is unavailablez
Final[str]_FCNTL_UNAVAILABLEc                *    t        t        t              r   r,   r   r4   _fds    r   r0   r0   "       &"455r   c                *    t        t        t              r   r6   r7   s    r   r3   r3   %   r9   r   c                  H    e Zd ZdZd
dZddZddZddZddZd
dZ	d
dZ
y	)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                H    | j                         }| | j                  |  y y r   )_acquire_native_switch_to_soft_lock)r   missing_flocks     r   r   zUnixFileLock._acquireE   s+     002M()))=9 )r   c                   t        | j                         t        j                  }t	        t        dd       x}||z  }|t        j
                  z  }| j                         }	 t        j                  | j                  ||      }| j                  |       	 t        |      }|r| j)                  |       y | j%                          t        j&                  |       y # t        $ r= | j                  r/t        | j                        j                  j                         rY y  t        $ rm t        | j                        j                         s 	 t        j                  | j                  |t        j
                   z  |      }n# t        $ r Y Y y w xY wY w xY w# t        $ rG}|j                   t"        k7  r&| j%                          t        j&                  |        ||fcY d }~S d }~ww xY w)N
O_NOFOLLOW)r   	lock_fileosO_RDWRgetattrO_CREAT
_open_modeopenFileNotFoundErrorr	   parentexistsPermissionError_mark_descriptor_pendingr0   r,   r-   r   _mark_descriptor_releasedclose_finalize_locked_fd)r   
open_flags
o_nofollow	open_moder.   lockedr/   s          r   r=   zUnixFileLock._acquire_nativeJ   s   #DNN3 J%b,==
Jj(
"**$J)I WWT^^ZC" ))"-%-b1 ((,  ..0= %  >>d4>>&:&A&A&H&H&J"   DNN+224 rzzk1I9UB(       %??f,224HHRL9}$%s[   "!C F AF-F3F ?F 	F	FFFF	G' <G"G'"G'c                   d }t        t              5  t        j                  |      x}j                  |j
                  f}d d d        | j                          t        j                  |       | j                  r| j                  s| j                  |t        t              5  t        j                  | j                        }||j                  |j
                  fk(  r#t        | j                        j                          d d d        | j                          | j!                          y # 1 sw Y   xY w# 1 sw Y   6xY wr   )r   r,   rC   fstatst_devst_inorN   rO   _fallback_to_soft_preserve_lock_file_on_acquiredlstatrB   r	   unlink_fallback_to_soft_lockr   )r   r.   r?   identityrV   currents         r   r>   z!UnixFileLock._switch_to_soft_lockv   s     04H'" H%'XXb\1E995<<GH**,HHRL))T-E-EIZIZIf $#'" 2((4>>2??(//12 '')MMOH H2 2s   .D)"AD5)D25D>c                   d}	 t        j                  |      }|j                  dk7  r)t        j                  |d       | j	                  |       d}|r)| j                  ||j                  |j                  f       y | j                          t        j                  |       y # t
        $ r' | j                          t        j                  |        w xY w)NFr   T)rC   rV   st_nlink	ftruncate_apply_explicit_moder,   rN   rO   _mark_descriptor_ownedrW   rX   )r   r.   keepstat_results       r   rP   z UnixFileLock._finalize_locked_fd   s     D	 hhrl''1,LLQ'--b1D
 ++B1C1C[EWEW0XY..0  ..0s   AB" "0Cc                    | j                   rCt        t              5  t        j                  || j
                  j                         d d d        y y # 1 sw Y   y xY wr   )has_explicit_moder   rL   rC   fchmod_contextmoder   r.   s     r   rd   z!UnixFileLock._apply_explicit_mode   sJ    %%o. 6IIb$--"4"456 6 &6 6s   +AAc                    ddl m} t        j                  dd       ddlm}m} t        | |      r|| _        y || _        y )Nr   )SoftFileLockzDflock not supported on this filesystem, falling back to SoftFileLock   )
stacklevel)AsyncSoftFileLockBaseAsyncFileLock)	_softro   warningswarnasynciorr   rs   
isinstance	__class__)r   ro   rr   rs   s       r   r^   z#UnixFileLock._fallback_to_soft_lock   s3     ,MM`mnoE2<TCT2U.DN[gDNr   c                    t        d| j                  j                        }t        |       | j	                          | j                  |d       y )NintT)default_suppresses)r   rk   lock_file_fdr3   rN   _close_released_fdrm   s     r   r   zUnixFileLock._release   s@    eT]]778B rN**,##B4#@r   Nr   )r   ztuple[int, OSError] | None)r.   r{   r?   r,   r   r    r.   r{   r   r    )r!   r"   r#   r$   r   r=   r>   rP   rd   r^   r   r%   r   r   r   r   <   s-    		:
*	X	&	*	6
	h	Ar   	has_fcntl)r   r0   r3   r   )r.   r{   r   boolr   )r8   r{   r   r   )r8   r{   r   r    )'
__future__r   rC   sysru   
contextlibr   r-   r   r   r   r   pathlibr	   typingr
   r   _apir   _utilr   r   platformr   r(   r)   r*   r+   r2   _	frozensetr&   __annotations__r0   r3   ImportErrorAttributeErrorr4   __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'