U ��.e��@s\ddlZddlZddlZddlmZddlmZddlmZddl m Z Gdd�de�Z dS) �N)� HTTPAdapter�)�CacheController)� DictCache)�CallbackFileWrappercsNeZdZddhZd�fdd� Zd�fdd� Zd�fd d � Z�fd d �Z�ZS)�CacheControlAdapterZPUTZDELETENTc sLtt|�j||�|pt�|_||_|p*d|_|p4t} | |j||d�|_dS)N)ZGET)� cache_etags� serializer) �superr�__init__r�cache� heuristic�cacheable_methodsr� controller) �selfr rZcontroller_classr r r�args�kwZcontroller_factory�� __class__��D/usr/lib/python3.8/site-packages/pip/_vendor/cachecontrol/adapter.pyr s   �zCacheControlAdapter.__init__c s�|p|j}|j|krhz|j�|�}Wntjk r>d}YnX|rT|j||dd�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�methodrZcached_request�zlib�error�build_responseZheaders�updateZconditional_headersr r�send)r�requestrr� cacheable�cached_response�resprrrr$s   zCacheControlAdapter.sendFc s|p|j}|s�|j|kr�|jr*|j�|�}|jdkrh|j�||�}||k rNd}|jdd�|��|}n\|jdkr�|j� ||�nBt |j t � |jj ||��|_ |jr�|j��fdd�}t�||�|_tt|��||�}|j|jk�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 i0TF)Zdecode_contenti-cs��|jdkr|j��dS)Nr)Z chunk_left�_fpZ_close�r�Zsuper_update_chunk_lengthrr�_update_chunk_lengthns [email protected]_response.._update_chunk_length)rrr ZapplyZstatusrZupdate_cached_response�readZ release_connZcache_responserr"� functools�partialZchunkedr%�types� MethodTyper rr�invalidating_methods�ok� cache_urlZurlr �deleter) rrZresponserrrr r%r!r-rr$rr9sJ   �  �� � z"CacheControlAdapter.build_responsecs|j��tt|���dS)N)r �closer rr#rrrr/�s zCacheControlAdapter.close)NTNNNN)N)FN) �__name__� __module__� __qualname__r+r rrr/� __classcell__rrrrr s��Jr) r)r'rZpip._vendor.requests.adaptersrrrr rZ filewrapperrrrrrr�s