
0c@_	                 @   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	 d d l
 m Z m Z d d l m Z d d	 l m Z e r d d
 l m Z m Z d d   Z e d d    Z Gd d   d e  Z d S)zHTTP cache implementation.
    N)contextmanager)	BaseCache)	FileCache)Response)adjacent_tmp_filereplace)
ensure_dir)MYPY_CHECK_RUNNING)OptionalIteratorc             C   s   t  |  d d  S)N
from_cacheF)getattr)response r   :/tmp/pip-build-jynh7p1z/pip/pip/_internal/network/cache.pyis_from_cache   s    r   c               c   s(   y	 d VWn t  t f k
 r# Yn Xd 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IOErrorr   r   r   r   suppressed_cache_errors   s    	r   c                   sX   e  Z d  Z d Z   f d d   Z d d   Z d d   Z d d	   Z d
 d   Z   S)SafeFileCachezw
    A file based cache which is safe to use even when the target directory may
    not be accessible or writable.
    c                s8   | d  k	 s t  d   t t |   j   | |  _ d  S)Nz!Cache directory must not be None.)AssertionErrorsuperr   __init__	directory)selfr   )	__class__r   r   r   *   s    zSafeFileCache.__init__c             C   sB   t  j |  } t | d  d   | g } t j j |  j |  S)N   )r   encodelistospathjoinr   )r   namehashedpartsr   r   r   _get_cache_path0   s    zSafeFileCache._get_cache_pathc             C   sG   |  j  |  } t   ( t | d   } | j   SWd  QRXWd  QRXd  S)Nrb)r%   r   openread)r   keyr    fr   r   r   get9   s    
zSafeFileCache.getc             C   sm   |  j  |  } t   N t t j j |   t |   } | j |  Wd  QRXt | j	 |  Wd  QRXd  S)N)
r%   r   r   r   r    dirnamer   writer   r"   )r   r)   valuer    r*   r   r   r   set@   s    
zSafeFileCache.setc          	   C   s1   |  j  |  } t    t j |  Wd  QRXd  S)N)r%   r   r   remove)r   r)   r    r   r   r   deleteK   s    
zSafeFileCache.delete)	__name__
__module____qualname____doc__r   r%   r+   r/   r1   r   r   )r   r   r   $   s   	r   )r5   r   
contextlibr   Zpip._vendor.cachecontrol.cacher   pip._vendor.cachecontrol.cachesr   Zpip._vendor.requests.modelsr   Zpip._internal.utils.filesystemr   r   Zpip._internal.utils.miscr   Zpip._internal.utils.typingr	   Ztypingr
   r   r   r   r   r   r   r   r   <module>   s   