o
    Zh                     @   s   d dl Z d dlZd dlZddlmZmZ ejZejdkrMd dlZd dl	Z	d dl
Z
d dlZd dlZe	 Zdejejef defddZdejfd	d
ZdS ejdkrod dlZdejejef defddZdejfdd
ZdS ed)    N   )	constants
exceptionsntfile_flagsc              
   C   s   t t j| } d}|tj@ r|tjO }|tj@ r|tjO }| 	 }|r(| 
d t|  }z8zt||ddt W n  tjy[ } z|jtjkrVtjtjj|j| d| d }~ww W |rf| 
| d S d S |rp| 
| w w Nr   i  fh)typingcastIO	LockFlagsNON_BLOCKINGwin32conZLOCKFILE_FAIL_IMMEDIATELY	EXCLUSIVEZLOCKFILE_EXCLUSIVE_LOCKtellseekmsvcrtget_osfhandlefileno	win32fileZ
LockFileEx__overlapped
pywintypeserrorwinerrorZERROR_LOCK_VIOLATIONr   ZAlreadyLockedLockExceptionLOCK_FAILEDstrerror)r   r   modesaveposos_fh	exc_value r#   N/var/www/html/lang_env/lib/python3.10/site-packages/portalocker/portalocker.pylock   s<   




r%   c              
   C   s   zO|   }|r| d t|  }z3z
t|ddt W n tj	y8 } z|j
t
jkr. W Y d }~nd }~ww W |rD| | W d S W d S |rO| | w w  tyg } ztjtjj|j| d|d }~ww r   )r   r   r   r   r   r   ZUnlockFileExr   r   r   r   ZERROR_NOT_LOCKEDOSErrorr   r   r   r   )r   r    r!   excr#   r#   r$   unlock<   sD   

r(   posixc              
   C   s   t f}tt |tf7 }W d    n1 sw   Y  |tj@ r.|tjtjB @ s.t	dz	t
| | W d S  |yK } ztj|| d|d }~ww )NzXWhen locking in non-blocking mode the SHARED or EXCLUSIVE flag must be specified as wellr	   )IOError
contextlibsuppress	NameErrorBlockingIOErrorr   r   ZSHAREDr   RuntimeErrorfcntlflockr   r   )r   r   Zlocking_exceptionsr"   r#   r#   r$   r%   \   s    
c                 C   s   t |  tj d S )N)r0   r1   r   r   ZUNBLOCK)r   r#   r#   r$   r(   q   s   z3PortaLocker only defined for nt and posix platforms)r+   osr    r   r   r   namer   r   r   r   r   Z
OVERLAPPEDr   Unionr   intr%   r(   r0   r/   r#   r#   r#   r$   <module>   s&    
&
