
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
ÝPf   ã               @   sT   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	 G dd„ deƒZ
dS )	é    N)ÚHTTPAdapteré   )ÚCacheController)Ú	DictCache)ÚCallbackFileWrapperc                   sP   e Zd ZeddgƒZd‡ fdd„	Z‡ fdd„Zd‡ fd
d„	Z‡ fdd„Z‡  Z	S )ÚCacheControlAdapterZPUTZDELETENTc       	         sB   t t| ƒj||Ž |ptƒ | _|| _|p*t}|| j||d�| _d S )N)Úcache_etagsÚ
serializer)Úsuperr   Ú__init__r   ÚcacheÚ	heuristicr   Ú
controller)	Úselfr   r   Zcontroller_classr	   r   ÚargsÚkwZcontroller_factory)Ú	__class__© ú/usr/lib/python3.6/adapter.pyr      s    zCacheControlAdapter.__init__c                sV   |j dkr>| jj|ƒ}|r*| j||dd�S |jj| 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.
        ÚGETT)Ú
from_cache)
Úmethodr   Zcached_requestÚbuild_responseZheadersÚupdateZconditional_headersr
   r   Úsend)r   Úrequestr   Úcached_responseÚresp)r   r   r   r      s    
zCacheControlAdapter.sendFc                s  | r¼|j dkr¼| jr"| jj|ƒ}|jdkr`| jj||ƒ}||k	rFd}|jdd� |jƒ  |}n\|jdkrz| jj||ƒ nBt	|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
        r   i0  TF)Zdecode_contenti-  c                s   ˆ ƒ  | j dkr| jjƒ  d S )Nr   )Z
chunk_leftÚ_fpZ_close)r   )Úsuper_update_chunk_lengthr   r   Ú_update_chunk_lengthg   s    
z@CacheControlAdapter.build_response.<locals>._update_chunk_length)r   r   ZapplyZstatusr   Zupdate_cached_responseÚreadZrelease_connZcache_responser   r   Ú	functoolsÚpartialZchunkedr    ÚtypesÚ
MethodTyper
   r   r   Úinvalidating_methodsÚokÚ	cache_urlZurlr   Údeleter   )r   r   Zresponser   r   r    r   r(   )r   )r   r   r   3   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)NTNNN)F)
Ú__name__Ú
__module__Ú__qualname__Úsetr&   r   r   r   r*   Ú__classcell__r   r   )r   r   r      s       Hr   )r$   r"   Zpip._vendor.requests.adaptersr   r   r   r   r   Zfilewrapperr   r   r   r   r   r   Ú<module>   s   