shell bypass 403
U
��.e� � @ s\ d dl Z d dlZd dlZd dlmZ ddlmZ ddlmZ ddl m
Z
G dd� de�ZdS ) � N)�HTTPAdapter� )�CacheController)� DictCache)�CallbackFileWrapperc sN e Zd ZddhZd� fdd� Zd� fdd� Zd� fd
d� Z� fdd
�Z� ZS )�CacheControlAdapterZPUTZDELETENTc
sL t t| �j||� |pt� | _|| _|p*d| _|p4t} | | j||d�| _d S )N)ZGET)�cache_etags�
serializer) �superr �__init__r �cache� heuristic�cacheable_methodsr �
controller)
�selfr r Zcontroller_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�|�}W n tjk
r> d}Y nX |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 �methodr Zcached_request�zlib�error�build_responseZheaders�updateZconditional_headersr
r �send)r �requestr r � cacheable�cached_response�respr r r r $ s
zCacheControlAdapter.sendFc
s |p| j }|s�|j|kr�| jr*| j�|�}|jdkrh| j�||�}||k rNd}|jdd� |�� |}n\|jdkr�| j� ||� nBt
|jt�
| 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
i0 TF)Zdecode_contenti- c s � � | j dkr| j�� d S )Nr )Z
chunk_left�_fpZ_close�r �Zsuper_update_chunk_lengthr r �_update_chunk_lengthn s
z@CacheControlAdapter.build_response.<locals>._update_chunk_length)r r r
ZapplyZstatusr Zupdate_cached_response�readZrelease_connZcache_responser r"