U ʗRe@s`ddlZddlZddlZddlmZddlmZmZddlm Z ddl m Z GdddeZ dS) N) HTTPAdapter)CacheControllerPERMANENT_REDIRECT_STATUSES) DictCache)CallbackFileWrappercsPeZdZdddhZdfdd Zdfdd Zdfd d Zfd dZZS)CacheControlAdapterPUTPATCHDELETENTc sTtt|j|||dkr tn||_||_|p2d|_|pd}YnX|rT|j||ddS|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) rmethodrcached_requestzliberrorbuild_responseheadersupdateconditional_headersrrsend)rrequestrr cacheablecached_responseresprrrr'(s   zCacheControlAdapter.sendFc s|p|j}|s|j|kr|jr*|j|}|jdkrh|j||}||k rNd}|jdd||}n`t |jt kr|j ||nBt |j t|jj |||_ |jr|jfdd}t|||_tt|||}|j|jkr |jr |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)decode_contentcs|jdkr|jdS)Nr) chunk_left_fp_closersuper_update_chunk_lengthrr_update_chunk_lengthrs z@CacheControlAdapter.build_response.._update_chunk_length)rrrapplystatusrupdate_cached_responseread release_connintrcache_responserr. functoolspartialchunkedr3types MethodTyperrr#invalidating_methodsok cache_urlurlrdeleter) rr(responserrr)r*r3r+rBrr1rr#=sJ      z"CacheControlAdapter.build_responsecs|jtt|dS)N)rcloserrr0rrrrFs zCacheControlAdapter.close)NTNNNN)N)FN) __name__ __module__ __qualname__r@rr'r#rF __classcell__rrrrrs Jr) r>r;r!Zpip._vendor.requests.adaptersrrrrrr filewrapperrrrrrrs