o
    T©ZhB	  ã                   @   sP   d 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	 G dd„ deƒZdS )	z/Utilities to handle file locking in `datasets`.é    N)ÚFileLock)ÚUnixFileLock)Ú__version__)Úversionc                       s:   e Zd ZdZdZ‡ fdd„Zededefdd„ƒZ‡  Z	S )	r   zw
    A `filelock.FileLock` initializer that handles long paths.
    It also uses the current umask for lock files.
    éÿ   c                    sf   d|vrt  t¡t  d¡krt d¡}t |¡ d| @ |d< |  |¡}tƒ j|g|¢R i |¤Ž d S )NÚmodez3.10.0i¶  )r   ÚparseÚ_filelock_versionÚosÚumaskÚhash_filename_if_too_longÚsuperÚ__init__)ÚselfZ	lock_fileÚargsÚkwargsr   ©Ú	__class__© úO/var/www/html/lang_env/lib/python3.10/site-packages/datasets/utils/_filelock.pyr   "   s   


zFileLock.__init__ÚpathÚreturnc                 C   s¤   t j t j |¡¡}t j |¡}| j}t| tƒr%t|t  	t j 
|¡¡jƒ}t|ƒ|krPt j 
|¡}tt|ƒƒ}|d |t|ƒ d … d | d }t j ||¡S |S )Né   z...z.lock)r
   r   ÚabspathÚ
expanduserÚbasenameÚMAX_FILENAME_LENGTHÚ
issubclassr   ÚminÚstatvfsÚdirnameÚ	f_namemaxÚlenÚstrÚhashÚjoin)Úclsr   ÚfilenameZmax_filename_lengthr    Zhashed_filenameZnew_filenamer   r   r   r   ,   s   
"ÿz"FileLock.hash_filename_if_too_long)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Úclassmethodr#   r   Ú__classcell__r   r   r   r   r      s    
r   )
r+   r
   Zfilelockr   Z	FileLock_r   r   r	   Ú	packagingr   r   r   r   r   Ú<module>   s   