o
    ò.Ði3	  ã                   @   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__)ÚselfÚ	lock_fileÚargsÚkwargsr   ©Ú	__class__© úL/home/ubuntu/.local/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   ÚfilenameÚmax_filename_lengthr!   Úhashed_filenameÚ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
   Úfilelockr   Ú	FileLock_r   r   r	   Ú	packagingr   r   r   r   r   Ú<module>   s   