
    ܖi                    n   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mZ ej                  dk(  rpd dlZd dlZd d	lmZ d
ZdZ ej&                  dd      Zej*                  gej,                  _        ej0                  ej,                  _        ddZ G d de	      ZdgZy G d de	      ZdgZy)    )annotationsN)EACCES)cast   )BaseFileLock)ensure_directory_existsraise_on_not_writable_filewin32)wintypesi   l    kernel32T)use_last_errorc                    t         j                  |       }|t        k(  r!t        j                         }|dk(  ry|dk(  ryyt        |t        z        S )a  
        Check if a path is a reparse point (symlink, junction, etc.) on Windows.

        :param path: Path to check

        :returns: 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_errorboolFILE_ATTRIBUTE_REPARSE_POINT)pathattrserrs      U/var/www/html/content-pipeline/venv/lib/python3.12/site-packages/filelock/_windows.py_is_reparse_pointr      sS     ,,T2++'')CaxaxE8899    c                       e Zd ZdZddZddZy)WindowsFileLockWUses the :func:`msvcrt.locking` function to hard lock the lock file on Windows systems.c                   t        | j                         t        | j                         t        | j                        rd| j                   }t	        |      t
        j                  t
        j                  z  }	 t        j                  | j                  || j                               }	 t        j                  |t        j                  d       || j                  _        y # t        $ r3}t        j                  |       |j                   t"        k7  r Y d }~y d }~ww xY w# t        $ r}|j                   t"        k7  r Y d }~y d }~ww xY w)Nz1Lock file is a reparse point (symlink/junction): r   )r	   	lock_filer   r   OSErrorosO_RDWRO_CREATopen
_open_modemsvcrtlockingLK_NBLCK_contextlock_file_fdcloseerrnor   )selfmsgflagsfd	exceptions        r   _acquirezWindowsFileLock._acquire3   s    &t~~6#DNN3 !0I$..IYZcl" 		** 4WWT^^UDOO4EF
4NN2v: 24DMM.  HHRL &0 1  ??f, -s0   </D" ,%C# #	D,)DD"	E	+EE	c                    t        d| j                  j                        }d | j                  _        t        j                  |t        j
                  d       t        j                  |       y )Nintr   )r   r,   r-   r)   r*   LK_UNLCKr$   r.   )r0   r3   s     r   _releasezWindowsFileLock._releaseP   sC    eT]]778B)-DMM&NN2v2HHRLr   NreturnNone__name__
__module____qualname____doc__r5   r9    r   r   r   r   0   s    e	4:	r   r   c                       e Zd ZdZddZddZy)r   r    c                    t         NNotImplementedErrorr0   s    r   r5   zWindowsFileLock._acquire[       %%r   c                    t         rE   rF   rH   s    r   r9   zWindowsFileLock._release^   rI   r   Nr:   r=   rB   r   r   r   r   X   s    e	&	&r   )r   strr;   r   )
__future__r   r$   sysr/   r   typingr   _apir   _utilr   r	   platformr   r)   r   r   r   WinDLLr   LPCWSTRr   argtypesDWORDrestyper   r   __all__rB   r   r   <module>rX      s    " 	 
    F<<7 $. ( j>I-5-=-=,>I  )+3>>I  (:.$, $f &, & r   