a
    &(a4                     @   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)IteratorOptional)	BaseCache)	FileCache)Response)adjacent_tmp_filereplace)
ensure_dir)responsereturnc                 C   s   t | ddS )N
from_cacheF)getattr)r    r   s/private/var/folders/m4/wm8f9dms7t78045sws6ggdl80000gn/T/pip-unpacked-wheel-vn48x2xj/pip/_internal/network/cache.pyis_from_cache   s    r   )r   c                   c   s"   z
dV  W n t y   Y n0 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                       sn   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	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 usJ dt    || _d S )Nz!Cache directory must not be None.)super__init__r   )selfr   	__class__r   r   r   %   s    
zSafeFileCache.__init__)namer   c                 C   s6   t |}t|d d |g }tjj| jg|R  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   st   |  |}t P t|d&}| W  d    W  d    S 1 sH0    Y  W d    n1 sf0    Y  d S )Nrb)r$   r   openread)r   r%   r    fr   r   r   get2   s    
zSafeFileCache.get)r%   valuer   c              	   C   s   |  |}t ^ ttj| t|}|| W d    n1 sJ0    Y  t|j	| W d    n1 st0    Y  d S N)
r$   r   r
   r   r    dirnamer   writer	   r   )r   r%   r+   r    r)   r   r   r   set8   s    

(zSafeFileCache.setc                 C   s>   |  |}t  t| W d    n1 s00    Y  d S r,   )r$   r   r   remove)r   r%   r    r   r   r   deleteB   s    
zSafeFileCache.delete)__name__
__module____qualname____doc__strr   r$   r   bytesr*   r/   r1   __classcell__r   r   r   r   r      s   
r   )r5   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   
