U
    ƒIÀda  ã                   @   s¢   d Z ddlZddlmZ ddlmZmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZmZ dd	lmZ eed
œdd„Zeed dœdd„ƒZG dd„ deƒZdS )zHTTP cache implementation.
é    N)Úcontextmanager)Ú	GeneratorÚOptional)Ú	BaseCache)Ú	FileCache)ÚResponse)Úadjacent_tmp_fileÚreplace)Ú
ensure_dir)ÚresponseÚreturnc                 C   s   t | ddƒS )NÚ
from_cacheF)Úgetattr)r   © r   úT/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/pip/_internal/network/cache.pyÚis_from_cache   s    r   )NNN)r   c                   c   s$   z
dV  W n t k
r   Y nX dS )zvIf we can't access the cache then we can just skip caching and process
    requests as if caching wasn't enabled.
    N)ÚOSErrorr   r   r   r   Úsuppressed_cache_errors   s    
r   c                       sv   e Zd ZdZeddœ‡ fdd„Zeedœdd„Zeee d	œd
d„Z	deeee
 ddœdd„Zedd	œdd„Z‡  ZS )ÚSafeFileCachezw
    A file based cache which is safe to use even when the target directory may
    not be accessible or writable.
    N)Ú	directoryr   c                    s$   |d k	st dƒ‚tƒ  ¡  || _d S )Nz!Cache directory must not be None.)ÚAssertionErrorÚsuperÚ__init__r   )Úselfr   ©Ú	__class__r   r   r   %   s    
zSafeFileCache.__init__)Únamer   c                 C   s4   t  |¡}t|d d… ƒ|g }tjj| jf|žŽ S )Né   )r   ÚencodeÚlistÚosÚpathÚjoinr   )r   r   ÚhashedÚpartsr   r   r   Ú_get_cache_path*   s    
zSafeFileCache._get_cache_path)Úkeyr   c                 C   sR   |   |¡}tƒ �8 t|dƒ�"}| ¡ W  5 Q R £ W  5 Q R £ S Q R X W 5 Q R X d S )NÚrb)r%   r   ÚopenÚread)r   r&   r!   Úfr   r   r   Úget2   s    
zSafeFileCache.get)r&   ÚvalueÚexpiresr   c              
   C   sZ   |   |¡}tƒ �@ ttj |¡ƒ t|ƒ�}| |¡ W 5 Q R X t|j	|ƒ W 5 Q R X d S ©N)
r%   r   r
   r    r!   Údirnamer   Úwriter	   r   )r   r&   r,   r-   r!   r*   r   r   r   Úset8   s    

zSafeFileCache.setc              	   C   s*   |   |¡}tƒ � t |¡ W 5 Q R X d S r.   )r%   r   r    Úremove)r   r&   r!   r   r   r   ÚdeleteB   s    
zSafeFileCache.delete)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústrr   r%   r   Úbytesr+   Úintr1   r3   Ú__classcell__r   r   r   r   r      s   
r   )r7   r    Ú
contextlibr   Útypingr   r   Zpip._vendor.cachecontrol.cacher   Úpip._vendor.cachecontrol.cachesr   Zpip._vendor.requests.modelsr   Úpip._internal.utils.filesystemr   r	   Úpip._internal.utils.miscr
   Úboolr   r   r   r   r   r   r   Ú<module>   s   
