
    4[em                        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	Zej                  d
k(  r G d de      Zn	 d dlZdZ G d de      ZddgZy# e$ r Y w xY w)    )annotationsN)suppress)ENOSYS)cast   )BaseFileLock)ensure_directory_existsFwin32c                       e Zd ZdZddZddZy)UnixFileLockHUses the :func:`fcntl.flock` to hard lock the lock file on unix systems.c                    t         NNotImplementedErrorselfs    0/usr/lib/python3/dist-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   Tc                       e Zd ZdZddZddZy)r   r   c                   t        | j                         t        j                  t        j                  z  t        j
                  z  }t        j                  | j                  || j                  j                        }t        t              5  t        j                  || j                  j                         d d d        	 t        j                  |t        j                  t        j                  z         || j                  _        y # 1 sw Y   QxY w# t"        $ r@}t        j$                  |       |j&                  t(        k(  rd}t+        |      |Y d }~y d }~ww xY w)NzFFileSystem does not appear to support flock; user SoftFileLock instead)r	   	lock_fileosO_RDWRO_CREATO_TRUNCopen_contextmoder   PermissionErrorfchmodfcntlflockLOCK_EXLOCK_NBlock_file_fdOSErrorcloseerrnor   r   )r   
open_flagsfd	exceptionmsgs        r   r   zUnixFileLock._acquire$   s    #DNN3RZZ/"**<JT]]5G5GHB/* 2		"dmm00120B => .0*2 2  B??f,bC-c2	A -Bs$   +D 5D D	E6EEc                    t        t        | j                  j                        }d | j                  _        t	        j
                  |t        j                         t        j                  |       y r   )	r   intr+   r3   r/   r0   LOCK_UNr&   r5   )r   r8   s     r   r   zUnixFileLock._release4   sC     c4==556B)-DMM&KKEMM*HHRLr   Nr   r   r"   r   r   r   r   !   s    V	0 	r   	has_fcntl)
__future__r   r&   sys
contextlibr   r6   r   typingr   _apir   _utilr	   r>   platformr   r/   ImportError__all__r"   r   r   <module>rH      s{    " 	 
     * 	<<7&| & 	| < E  s   A! !A)(A)