U
    ™P^¹  ã                   @   sˆ   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	m
Z
 ddlmZ ddlmZ erhdd	lmZ ed
d„ ƒZG dd„ deƒZdS )zHTTP cache implementation.
é    N)Úcontextmanager)Ú	BaseCache)Ú	FileCache)Úadjacent_tmp_fileÚreplace)Ú
ensure_dir)ÚMYPY_CHECK_RUNNING)ÚOptionalc                	   c   s(   z
dV  W n t tf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)ÚOSErrorÚIOError© r   r   ú</tmp/pip-install-220asx0h/pip/pip/_internal/network/cache.pyÚsuppressed_cache_errors   s    
r   c                       s@   e Zd ZdZ‡ fdd„Zdd„ Zdd„ Zdd	„ Z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.
    c                    s(   |d k	st dƒ‚tt| ƒ ¡  || _d S )Nz!Cache directory must not be None.)ÚAssertionErrorÚsuperr   Ú__init__Ú	directory)Úselfr   ©Ú	__class__r   r   r   &   s    zSafeFileCache.__init__c                 C   s4   t  |¡}t|d d… ƒ|g }tjj| jf|žŽ S )Né   )r   ÚencodeÚlistÚosÚpathÚjoinr   )r   ÚnameÚhashedÚpartsr   r   r   Ú_get_cache_path,   s    
zSafeFileCache._get_cache_pathc                 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   Úkeyr   Úfr   r   r   Úget5   s    
zSafeFileCache.getc              
   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$   Úvaluer   r%   r   r   r   Úset<   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   ÚdeleteG   s    
zSafeFileCache.delete)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r    r&   r+   r-   Ú__classcell__r   r   r   r   r       s   	r   )r1   r   Ú
contextlibr   Zpip._vendor.cachecontrol.cacher   Úpip._vendor.cachecontrol.cachesr   Úpip._internal.utils.filesystemr   r   Úpip._internal.utils.miscr   Úpip._internal.utils.typingr   Útypingr	   r   r   r   r   r   r   Ú<module>   s   

