a
    hbòfS  ã                   @   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   úX/home/httpd/docs/test/DocsMgr/lib/python3.9/site-packages/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                       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 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%   ÚvalueÚexpiresr   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   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)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústrr   r$   r   Úbytesr*   Úintr0   r2   Ú__classcell__r   r   r   r   r      s   
r   )r6   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   
