
    xj"                       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ng	 d dlZej        ej        ej        ej        fZdZ eee	eh          Zde d<   d!dZ!d"dZ"n# e#e$f$ r dZ%de d<   d#dZ!d$dZ"Y nw xY w G d de          Zej        dk    rddgZ&dS g d Z&dS )%    )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dS )UnixFileLockzHUses the :func:`fcntl.flock` to hard lock the lock file on unix systems.returnNonec                    t           NNotImplementedErrorselfs    T/home/agent/.hermes/hermes-agent/venv/lib/python3.11/site-packages/filelock/_unix.py_acquirezUnixFileLock._acquire       %%    c                    t           r   r   r   s    r   _releasezUnixFileLock._release   r   r   Nr   r   )__name__
__module____qualname____doc__r   r    r   r   r   r      sB        VV	& 	& 	& 	&	& 	& 	& 	& 	& 	&r   r   TzFinal[frozenset[int]]_CONTENTION_ERRNOSfdintr   boolc                    	 t          j        | t           j        t           j        z             n'# t          $ r}|j        t          v rY d }~dS  d }~ww xY wdS )NFT)fcntlflockLOCK_EXLOCK_NBOSErrorerrnor&   )r'   	exceptions     r   _lock_fd_nonblockingr2   .   si    B =>>>>   ?&888 55555 4s   ,/ 
AAAAr   c                D    t          j        | t           j                   d S r   )r+   r,   LOCK_UN)r'   s    r   
_unlock_fdr5   9   s    KEM*****r   zfcntl is unavailablez
Final[str]_FCNTL_UNAVAILABLE_fdc                6    t          t          t                    r   r/   r   r6   r7   s    r   r2   r2   "       &"4555r   c                6    t          t          t                    r   r9   r:   s    r   r5   r5   %   r;   r   c                  J    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
dS )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.
        r   r   c                J    |                                  }| | j        |  d S d S r   )_acquire_native_switch_to_soft_lock)r   missing_flocks     r   r   zUnixFileLock._acquireE   s7     0022M())=9999 )(r   tuple[int, OSError] | Nonec                   t          | j                   t          j        }t	          t          dd           x}||z  }|t          j        z  }|                                 }	 t          j        | j        ||          }n# t          $ r7 | j        r.t          | j                  j
                                        rY d S  t          $ rg t          | j                                                  s 	 t          j        | j        |t          j         z  |          }n# t          $ r Y Y d S w xY wY nw xY w|                     |           	 t          |          }nT# t          $ rG}|j        t"          k    r)|                                  t          j        |            ||fcY d }~S d }~ww xY w|r|                     |           n(|                                  t          j        |           d S )N
O_NOFOLLOW)r   	lock_fileosO_RDWRgetattrO_CREAT
_open_modeopenFileNotFoundErrorr	   parentexistsPermissionError_mark_descriptor_pendingr2   r/   r0   r   _mark_descriptor_releasedclose_finalize_locked_fd)r   
open_flags
o_nofollow	open_moder'   lockedr1   s          r   r?   zUnixFileLock._acquire_nativeJ   s   #DN333 J%b,===
Jj(
"*$J))I WT^ZCC$    >  d4>&:&:&A&H&H&J&J  44"       DN++2244  rzk1I9UUBB(      444  B  ))"---%-b11 % % %?f,,22444HRLLL9}$$$$$$%  ((,,,,..0004sZ   "A> ><D.=1D./)DD.
D(#D.'D((D.-D.E 
F(!<F#F(#F(r'   r(   rA   r/   c                n   d }t          t                    5  t          j        |          x}j        |j        f}d d d            n# 1 swxY w Y   |                                  t          j        |           | j        r| j	        s| j
        |t          t                    5  t          j        | j                  }||j        |j        fk    r&t          | j                                                   d d d            n# 1 swxY w Y   |                                  |                                  d S r   )r   r/   rF   fstatst_devst_inorQ   rR   _fallback_to_soft_preserve_lock_file_on_acquiredlstatrE   r	   unlink_fallback_to_soft_lockr   )r   r'   rA   identityrY   currents         r   r@   z!UnixFileLock._switch_to_soft_lockv   s    04H'"" H H%'Xb\\1E95<GH H H H H H H H H H H H H H H**,,,HRLLL) $T-E $IZIf $#'"" 2 2(4>22???((//1112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 '')))MMOOOOOs$   #AA
A
$ADD	Dc                   d}	 t          j        |          }|j        dk    r,t          j        |d           |                     |           d}n7# t
          $ r* |                                  t          j        |            w xY w|r$|                     ||j	        |j
        f           d S |                                  t          j        |           d S )NFr   T)rF   rY   st_nlink	ftruncate_apply_explicit_moder/   rQ   rR   _mark_descriptor_ownedrZ   r[   )r   r'   keepstat_results       r   rS   z UnixFileLock._finalize_locked_fd   s     D	 hrll'1,,LQ'''--b111D   ..000  ++B1C[EW0XYYYYY..000s   AA 4Bc                    | j         rNt          t                    5  t          j        || j        j                   d d d            d S # 1 swxY w Y   d S d S r   )has_explicit_moder   rO   rF   fchmod_contextmoder   r'   s     r   rg   z!UnixFileLock._apply_explicit_mode   s    % 6o.. 6 6Ib$-"45556 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 66 6s    A		AAc                    ddl m} t          j        dd           ddlm}m} t          | |          r|n|| _        d S )Nr   )SoftFileLockzDflock not supported on this filesystem, falling back to SoftFileLock   )
stacklevel)AsyncSoftFileLockBaseAsyncFileLock)	_softrr   warningswarnasyncioru   rv   
isinstance	__class__)r   rr   ru   rv   s       r   ra   z#UnixFileLock._fallback_to_soft_lock   sg     ,+++++M`mnooooEEEEEEEE2<TCT2U2Ug..[gDNNNr   c                    t          d| j        j                  }t          |           |                                  |                     |d           d S )Nr(   T)default_suppresses)r   rn   lock_file_fdr5   rQ   _close_released_fdrp   s     r   r   zUnixFileLock._release   sT    eT]788B rNNN**,,,##B4#@@@@@r   Nr    )r   rB   )r'   r(   rA   r/   r   r   r'   r(   r   r   )r!   r"   r#   r$   r   r?   r@   rS   rg   ra   r   r%   r   r   r   r   <   s        	 		: 	: 	: 	:
*	 *	 *	 *	X	 	 	 	&	 	 	 	*	6 	6 	6 	6
	h 	h 	h 	h	A 	A 	A 	A 	A 	Ar   	has_fcntl)r   r2   r5   r   )r'   r(   r   r)   r   )r7   r(   r   r)   )r7   r(   r   r   )'
__future__r   rF   sysrx   
contextlibr   r0   r   r   r   r   pathlibr	   typingr
   r   _apir   _utilr   r   platformr   r+   r,   r-   r.   r4   _	frozensetr&   __annotations__r2   r5   ImportErrorAttributeErrorr6   __all__r%   r   r   <module>r      sD   " " " " " " " 				 



        5 5 5 5 5 5 5 5 5 5 5 5                     * * * * * *	<7& & & & &| & & & &+[%-F 	 5>Ivv{>[4\4\\\\\		 		 		 			+ 	+ 	+ 	+ 	+5 ( 6 6 6)?????	6 	6 	6 	6	6 	6 	6 	6 	6 	66:xA xA xA xA xA| xA xA xAv <7{+GGGQQQGGGs   B B21B2