U
    ,e                     @   s`   d dl Z d dl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 G dd deZdS )	    N)HTTPAdapter   )CacheControllerPERMANENT_REDIRECT_STATUSES)	DictCache)CallbackFileWrapperc                       sP   e Zd ZdddhZd fdd	Zd fdd		Zd fdd	Z fddZ  ZS )CacheControlAdapterPUTPATCHDELETENTc           
         sT   t t| j|| |d kr t n|| _|| _|p2d| _|p<t}	|	| j||d| _d S )N)GET)cache_etags
serializer)	superr   __init__r   cache	heuristiccacheable_methodsr   
controller)
selfr   r   controller_classr   r   r   argskwZcontroller_factory	__class__ a/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/pip/_vendor/cachecontrol/adapter.pyr      s    
  zCacheControlAdapter.__init__c                    s   |p| j }|j|krhz| j|}W n tjk
r>   d}Y nX |rT| j||ddS |j| j	| t
t| j|f|}|S )z
        Send a request. Use the request information to see if it
        exists in the cache and cache the response if we need to and can.
        NT)
from_cache)r   methodr   Zcached_requestzliberrorbuild_responseheadersupdateZconditional_headersr   r   send)r   requestr   r   	cacheablecached_responserespr   r   r   r$   (   s    


zCacheControlAdapter.sendFc           
         s  |p| j }|s|j|kr| jr*| j|}|jdkrh| j||}||k	rNd}|jdd |  |}n`t	|jt
kr| j|| nBt|jt| jj|||_|jr|j  fdd}t|||_tt| ||}|j| jkr
|jr
| j|j}	| j|	 ||_|S )z
        Build a response by making a request or using the cache.

        This will end up calling send and returning a potentially
        cached response
        i0  TF)decode_contentc                    s      | j dkr| j  d S )Nr   )
chunk_left_fp_closer   Zsuper_update_chunk_lengthr   r   _update_chunk_lengthr   s    
z@CacheControlAdapter.build_response.<locals>._update_chunk_length)r   r   r   applystatusr   Zupdate_cached_responsereadrelease_connintr   Zcache_responser   r+   	functoolspartialchunkedr/   types
MethodTyper   r   r!   invalidating_methodsok	cache_urlurlr   deleter   )
r   r%   responser   r   r&   r'   r/   r(   r<   r   r.   r   r!   =   sJ    	

    z"CacheControlAdapter.build_responsec                    s   | j   tt|   d S )N)r   closer   r   r-   r   r   r   r@      s    
zCacheControlAdapter.close)NTNNNN)N)FN)	__name__
__module____qualname__r:   r   r$   r!   r@   __classcell__r   r   r   r   r      s   
         Jr   )r8   r5   r   pip._vendor.requests.adaptersr   r   r   r   r   r   Zfilewrapperr   r   r   r   r   r   <module>   s   