U ��.e9�@s~ddlZddlZddlmZddlmZddlmZzeWne k rXe e fZYnXdd�Z Gdd �d e�Z d d �ZdS) �N)�dedent�)� BaseCache)�CacheControllerc Cs�tj}|tjtjBO}ttd�r*|tjO}ttd�r>|tjO}zt�|�Wntt fk rdYnXt� |||�}zt� |d�WSt� |��YnXdS)N� O_NOFOLLOW�O_BINARY�wb) �os�O_WRONLY�O_CREAT�O_EXCL�hasattrrr�remove�IOError�OSError�open�fdopen�close)�filenameZfmode�flags�fd�r�N/usr/lib/python3.8/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py�_secure_open_writes      rc@sBeZdZddd�Zedd��Zd d �Zd d �Zd d�Zdd�Z dS)� FileCacheF���Nc Cs�|dk r|dk rtd��zddlm}ddlm}Wn$tk rXtd�} t| ��YnX|rd|}n |dkrp|}||_||_||_ ||_ ||_ dS)Nz/Cannot use use_dir_lock and lock_class togetherr)�LockFile)� MkdirLockFilez� NOTE: In order to use the FileCache you must have lockfile installed. You can install it via pip: pip install lockfile ) � ValueErrorZlockfilerZlockfile.mkdirlockfiler� ImportErrorr� directory�forever�filemode�dirmode� lock_class) �selfr!r"r#r$Z use_dir_lockr%rrZnoticerrr�__init__:s&  �zFileCache.__init__cCst�|�����S�N)�hashlibZsha224�encodeZ hexdigest)�xrrrr*aszFileCache.encodecCs4|�|�}t|dd��|g}tjj|jf|��S)N�)r*�listr �path�joinr!)r&�nameZhashed�partsrrr�_fnes z FileCache._fnc CsR|�|�}z,t|d��}|��W5QR�WSQRXWntk rLYdSXdS)N�rb)r2r�read�FileNotFoundError)r&�keyr0�fhrrr�getls    z FileCache.getc Cs||�|�}zt�tj�|�|j�Wnttfk r<YnX|�|��*}t |j|j ��}|� |�W5QRXW5QRXdSr() r2r �makedirsr.�dirnamer$rrr%rr#�write)r&r6�valuer0�lockr7rrr�setus  z FileCache.setcCs8|�|�}|js4zt�|�Wntk r2YnXdSr()r2r"r rr5)r&r6r0rrr�delete�s  zFileCache.delete)FrrNN) �__name__� __module__� __qualname__r'� staticmethodr*r2r8r>r?rrrrr8s� '  rcCst�|�}|�|�S)z\Return the file cache path based on the URL. This does not ensure the file exists! )rZ cache_urlr2)ZurlZ filecacher6rrr�url_to_file_path�s rD)r)r �textwrapr�cacherZ controllerrr5� NameErrorrrrrrDrrrr�s   )T