o
    ^i                     @  s   d dl mZ d dlZd dlZd dlmZ d dlmZ d dlm	Z	 d dl
mZ ddlmZ dd	lmZmZ ejd
krkd dlZd dlZd dlmZ dZdZejdddZejgej_ejej_dddZG dd deZnG dd deZdgZ dS )    )annotationsN)suppress)EACCES)Path)cast   )BaseFileLock)ensure_directory_existsraise_on_not_writable_filewin32)wintypesi   l    kernel32T)use_last_errorpathstrreturnboolc                 C  sB   t | }|tkrt }|dkrdS |dkrdS dS t|t@ S )a  
        Check if a path is a reparse point (symlink, junction, etc.) on Windows.

        :param path: Path to check
        :return: True if path is a reparse point, False otherwise
        :raises OSError: If GetFileAttributesW fails for reasons other than file-not-found
           F   )	_kernel32GetFileAttributesWINVALID_FILE_ATTRIBUTESctypesget_last_errorr   FILE_ATTRIBUTE_REPARSE_POINT)r   attrserr r   L/var/www/html/RAG/RAG_venv/lib/python3.10/site-packages/filelock/_windows.py_is_reparse_point   s   
r   c                   @  $   e Zd ZdZd	ddZd	ddZdS )
WindowsFileLockWUses the :func:`msvcrt.locking` function to hard lock the lock file on Windows systems.r   Nonec              
   C  s   t | j t| j t| jrd| j }t|tjtjB tjB }zt	| j|| j
j}W n tyG } z|jtkr< W Y d }~d S d }~ww z
t|tjd W n typ } zt| |jtkre W Y d }~d S d }~ww || j
_d S )Nz1Lock file is a reparse point (symlink/junction): r   )r
   	lock_filer	   r   OSErrorosO_RDWRO_CREATO_TRUNCopen_contextmodeerrnor   msvcrtlockingLK_NBLCKcloselock_file_fd)selfmsgflagsfd	exceptionr   r   r   _acquire2   s:   





WindowsFileLock._acquirec                 C  sl   t d| jj}d | j_t|tjd t| tt	 t
| j  W d    d S 1 s/w   Y  d S )Nintr   )r   r+   r2   r.   r/   LK_UNLCKr&   r1   r   r%   r   r$   unlink)r3   r6   r   r   r   _releaseP   s   

"WindowsFileLock._releaseNr   r#   __name__
__module____qualname____doc__r8   r=   r   r   r   r   r!   /   s    
r!   c                   @  r    )
r!   r"   r   r#   c                 C     t NNotImplementedErrorr3   r   r   r   r8   ^      r9   c                 C  rE   rF   rG   rI   r   r   r   r=   a   rJ   r>   Nr?   r@   r   r   r   r   r!   [   s    
)r   r   r   r   )!
__future__r   r&   sys
contextlibr   r-   r   pathlibr   typingr   _apir   _utilr	   r
   platformr   r.   r   r   r   WinDLLr   LPCWSTRr   argtypesDWORDrestyper   r!   __all__r   r   r   r   <module>   s.    


,