3 �Pf�@sTddlZddlZddlmZddlmZddlmZddlm Z Gdd�de�Z dS) �N)� HTTPAdapter�)�CacheController)� DictCache)�CallbackFileWrappercsPeZdZeddg�Zd�fdd� Z�fdd�Zd�fd d � Z�fd d �Z�Z S)�CacheControlAdapterZPUTZDELETENTc sBtt|�j||�|pt�|_||_|p*t}||j||d�|_dS)N)� cache_etags� serializer)�superr�__init__r�cache� heuristicr� controller) �selfr rZcontroller_classr r �args�kwZcontroller_factory)� __class__��/usr/lib/python3.6/adapter.pyr s zCacheControlAdapter.__init__c sV|jdkr>|jj|�}|r*|j||dd�S|jj|jj|��tt|�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) �methodrZcached_request�build_responseZheaders�updateZconditional_headersr r�send)r�requestr�cached_response�resp)rrrrs  zCacheControlAdapter.sendFcs| r�|jdkr�|jr"|jj|�}|jdkr`|jj||�}||k rFd}|jdd�|j�|}n\|jdkrz|jj||�nBt |j t j |jj||��|_ |j r�|j��fdd�}tj||�|_tt|�j||�}|j|jkr�|jr�|jj|j�}|jj|�||_|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 ri0TF)Zdecode_contenti-cs��|jdkr|jj�dS)Nr)Z chunk_left�_fpZ_close)r)�super_update_chunk_lengthrr�_update_chunk_lengthgs [email protected]_response.._update_chunk_length)rr ZapplyZstatusrZupdate_cached_response�readZ release_connZcache_responserr� functools�partialZchunkedr �types� MethodTyper rr�invalidating_methods�ok� cache_urlZurlr �deleter)rrZresponserrr rr()r)rrr3s<        z"CacheControlAdapter.build_responsecs|jj�tt|�j�dS)N)r �closer r)r)rrrr*{s zCacheControlAdapter.close)NTNNN)F) �__name__� __module__� __qualname__�setr&r rrr*� __classcell__rr)rrr s  Hr) r$r"Zpip._vendor.requests.adaptersrrrr rZ filewrapperrrrrrr�s