
0c@_                 @   s~   d  d l  Z  d  d l 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
 Gd d   d e  Z d S)	    N)HTTPAdapter   )CacheController)	DictCache)CallbackFileWrapperc            	       s   e  Z d  Z d d h Z d d d d d d   f d d  Z d   f d d  Z d	 d   f d
 d  Z   f d d   Z   S)CacheControlAdapterPUTDELETENTc       
         s}   t  t |   j | |   | d  k r. t   n | |  _ | |  _ | pI d |  _ | pX t }	 |	 |  j d | d | |  _ d  S)NGETcache_etags
serializer)zGET)	superr   __init__r   cache	heuristiccacheable_methodsr   
controller)
selfr   r   controller_classr   r   r   argskwcontroller_factory)	__class__ ?/tmp/pip-build-jynh7p1z/pip/pip/_vendor/cachecontrol/adapter.pyr      s    	zCacheControlAdapter.__init__c                s   | p |  j  } | j | k r y |  j j |  } Wn t j k
 rQ d } Yn X| rn |  j | | d d S| j j |  j j	 |   t
 t |   j | |  } | 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.
        N
from_cacheT)r   methodr   cached_requestzliberrorbuild_responseheadersupdateconditional_headersr   r   send)r   requestr   r   	cacheablecached_responseresp)r   r   r   r$   $   s    zCacheControlAdapter.sendFc       
         s  | p |  j  } | r!| j | k r!|  j r@ |  j j |  } | j d k r |  j j | |  } | | k	 rv d } | j d d  | j   | } n | j d k r |  j j	 | |  nc t
 | j t j |  j j	 | |   | _ | j r!| j     f d d   } t j | |  | _ t t |   j | |  } | j |  j k r|| j r||  j j | 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  Tdecode_contentFi-  c                s'       |  j  d k r# |  j j   d  S)Nr   )
chunk_left_fp_close)r   )super_update_chunk_lengthr   r   _update_chunk_lengthn   s    z@CacheControlAdapter.build_response.<locals>._update_chunk_length)r   r   r   applystatusr   update_cached_responsereadrelease_conn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    9   s:    			
				z"CacheControlAdapter.build_responsec                s$   |  j  j   t t |   j   d  S)N)r   closer   r   )r   )r   r   r   r@      s    zCacheControlAdapter.close)__name__
__module____qualname__r:   r   r$   r    r@   r   r   )r   r   r      s   Ir   )r8   r5   r   pip._vendor.requests.adaptersr   r   r   r   r   filewrapperr   r   r   r   r   r   <module>   s   