o
    Zh~                     @   s4  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlmZ d dl	m
Z
 d dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZ d dlmZmZmZ d dlmZm Z m!Z! ddl"m#Z#m$Z$ dd	l%m&Z&m'Z'm(Z(m)Z)m*Z* dd
l+m,Z,m-Z-m.Z.m/Z/ ddl0m1Z1 ddl2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9 ddl:m;Z; dZ<erddl=m>Z> G dd de?Z@G dd de?ZAdeeB deeeB eeBeBf f fddZC	d*deeBeBf deBdeeB fddZDG dd dZEG dd  d ZFe9eFe5jGd!G d"d# d#e6ZHG d$d% d%ZIee6eBeBf ZJG d&d' d'e6ZKG d(d) d)ZLdS )+    N)deque)TracebackType)TYPE_CHECKINGAnyAsyncIteratorDequeDictIteratorListMappingOptionalSequenceTupleTypeUnioncast)	parse_qslunquote	urlencode)CIMultiDictCIMultiDictProxyMultiMapping   )ZLibCompressorZLibDecompressor)CONTENT_DISPOSITIONCONTENT_ENCODINGCONTENT_LENGTHCONTENT_TRANSFER_ENCODINGCONTENT_TYPE)CHARTOKENparse_mimetypereify)HeadersParser)JsonPayloadLookupErrorOrderPayloadStringPayloadget_payloadpayload_type)StreamReader)MultipartReaderMultipartWriterBodyPartReaderBadContentDispositionHeaderBadContentDispositionParamparse_content_dispositioncontent_disposition_filename)ClientResponsec                   @      e Zd ZdS )r0   N__name__
__module____qualname__ r:   r:   H/var/www/html/lang_env/lib/python3.10/site-packages/aiohttp/multipart.pyr0   B       r0   c                   @   r5   )r1   Nr6   r:   r:   r:   r;   r1   F   r<   r1   headerreturnc                    s  dt dtfdd dt dtfdd}dt dtf fdd}dt dtfd	d
}dt dtfdd}dttjtddt dt dt fdd}| sJd i fS | d^}} |s`t	t
|  d i fS i }|rO|d}	d|	vryt	t
|  d i fS |	dd\}
}|
  }
| }|
|v rt	t
|  d i fS  |
st	t|	 qb||
r||r||dd }n |st	t|	 qbn||
r||r|dd\}}}|pd}nt	t|	 qbzt||d}W n^ ty   t	t|	 Y qbw d}||rd}||dd d}n+ |rd}n#|r;| d|d  }||r;|d ||dd d}d}|rIt	t
|  d i fS |||
< |se| |fS )Nstringr>   c                 S   s   t | o	tt| kS N)boolr!   setr?   r:   r:   r;   is_tokenM   s   z+parse_content_disposition.<locals>.is_tokenc                 S   s    | d | d   kodkS   S )Nr   "r:   rC   r:   r:   r;   	is_quotedP   s    z,parse_content_disposition.<locals>.is_quotedc                    s    | o
|  ddkS )N'   )countrC   rD   r:   r;   
is_rfc5987S      z-parse_content_disposition.<locals>.is_rfc5987c                 S   s
   |  dS )N*)endswithrC   r:   r:   r;   is_extended_paramV      
z4parse_content_disposition.<locals>.is_extended_paramc                 S   s@   |  dd }|sdS | dr| |d n| |d  }| S )NrN   r   FrE   )findrO   isdigit)r?   posZ	substringr:   r:   r;   is_continuous_paramY   s
   "z6parse_content_disposition.<locals>.is_continuous_param )charstextrW   c                S   s   t d| dd| S )Nz\\([z])z\1)resub)rX   rW   r:   r:   r;   unescape`   rM   z+parse_content_disposition.<locals>.unescape;r   =r   rE   rH   rI   utf-8strictTFz\/)strrA   joinmaprY   escaper    splitwarningswarnr0   poplowerstriplstripr1   r   UnicodeDecodeError)r=   rG   rL   rP   rU   r[   Zdisptypepartsparamsitemkeyvalueencoding_failed_valuer:   rK   r;   r2   J   s   *





>r2   filenamerm   namec           
         s   d|  | sd S  | v r|   S || v r| | S g }t  fdd|  D }t|D ]%\}\}}|dd\}}|drD|d d }|t|krP|| q+ |sUd S d|}d|v rq|dd	\}	}}|	pjd
}	t||	dS |S )Nz%s*c                 3   s&    | ]\}}|  r||fV  qd S r@   )
startswith).0ro   rp   Zname_sufr:   r;   	<genexpr>   s    
z/content_disposition_filename.<locals>.<genexpr>rN   r   rE   rV   rH   rI   r^   r_   )	sorteditems	enumeraterd   rO   r`   appendra   r   )
rm   rv   rl   Zfnparamsnumro   rp   rr   tailrq   r:   ry   r;   r3      s4   

r3   c                   @   sp   e Zd ZdZ						ddd	Zdd
dZded fddZdefddZ	de
ed  fddZdddZdS )MultipartResponseWrapperzzWrapper around the MultipartReader.

    It takes care about
    underlying connection and close it when it needs in.
    respr4   streamr-   r>   Nc                 C   s   || _ || _d S r@   )r   r   )selfr   r   r:   r:   r;   __init__   s   
z!MultipartResponseWrapper.__init__c                 C      | S r@   r:   r   r:   r:   r;   	__aiter__      z"MultipartResponseWrapper.__aiter__)r-   r/   c                        |   I d H }|d u rt|S r@   nextStopAsyncIterationr   partr:   r:   r;   	__anext__   
   z"MultipartResponseWrapper.__anext__c                 C   s   | j j S )z2Returns True when all response data had been read.)r   contentat_eofr   r:   r:   r;   r         zMultipartResponseWrapper.at_eofc                    s.   | j  I dH }| j  r|  I dH  |S )z#Emits next multipart reader object.N)r   r   r   releaser   rn   r:   r:   r;   r      s
   
zMultipartResponseWrapper.nextc                    s   | j  I dH  dS )z_Release the connection gracefully.

        All remaining content is read to the void.
        N)r   r   r   r:   r:   r;   r      s   z MultipartResponseWrapper.release)r   r4   r   r-   r>   N)r>   r   r>   N)r7   r8   r9   __doc__r   r   r   r   rA   r   r   r   r   r:   r:   r:   r;   r      s$    




	r   c                   @   s  e Zd ZdZdZdedddeddfd	d
Zded  fddZ	defddZ
dee fddZdddedefddZefdedefddZdedefddZdedefddZdefddZd9dd Zdd!d"ee defd#d$Zdd!d"ee deeeef  fd%d&Zdd!d"ee deeeef  fd'd(Zdefd)d*Zd+edefd,d-Zd+edefd.d/Zd+edefd0d1Z d2edefd3d4Z!e"dee fd5d6Z#e"dee fd7d8Z$dS ):r/   z&Multipart reader for single body part.i    boundaryheadersCIMultiDictProxy[str]r   r>   Nc                 C   s`   || _ || _|| _d| _| j td }|d urt|nd | _d| _t	 | _
d | _d| _i | _d S )NFr   )r   	_boundary_content_at_eofgetr   int_length_read_bytesr   _unread_prev_chunk_content_eof_cache)r   r   r   r   lengthr:   r:   r;   r     s   
zBodyPartReader.__init__c                 C   r   r@   r:   r   r:   r:   r;   r     r   zBodyPartReader.__aiter__c                    r   r@   r   r   r:   r:   r;   r     s
   zBodyPartReader.__anext__c                    s   |   I d H }|sd S |S r@   )readr   r:   r:   r;   r     s
   zBodyPartReader.nextFdecoder   c                   sH   | j rdS t }| j s|| | jI dH  | j r|r"| |S |S )zReads body part data.

        decode: Decodes data following by encoding
                method from Content-Encoding header. If it missed
                data remains untouched
            N)r   	bytearrayextend
read_chunk
chunk_sizer   )r   r   datar:   r:   r;   r      s   
zBodyPartReader.readsizec                    s   | j rdS | jr| |I dH }n| |I dH }|  jt|7  _| j| jkr,d| _ | j r?| j I dH }d|ks?J d|S )zWReads body part content chunk of the specified size.

        size: chunk size
        r   NT   
z3reader did not read all the data or it is malformed)r   r   _read_chunk_from_length_read_chunk_from_streamr   lenr   readline)r   r   chunkZclrfr:   r:   r;   r   0  s   
zBodyPartReader.read_chunkc                    s<   | j d us
J dt|| j | j }| j|I d H }|S )Nz(Content-Length required for chunked read)r   minr   r   r   )r   r   r   r   r:   r:   r;   r   F  s
   z&BodyPartReader._read_chunk_from_lengthc                    sb  |t | jd ksJ d| jd u }|r| j|I d H | _| j|I d H }|  jt| j 7  _| jdk s=J d| jd usDJ | j| }d| j }|rV||}n||t	dt | jt | }|dkrt
  t
jdtd | j||d   W d    n1 sw   Y  ||kr| jd | | _|t | j| }|sd	| _| j}|| _|S )
NrI   z<Chunk size must be greater or equal than boundary length + 2   zReading after EOFr   r   ignore)categoryT)r   r   r   r   r   r   r   r   rR   maxre   catch_warningsfilterwarningsDeprecationWarningZunread_datar   )r   r   Zfirst_chunkr   ZwindowrZ   idxresultr:   r:   r;   r   N  s:   


 
z&BodyPartReader._read_chunk_from_streamc                    s   | j rdS | jr| j }n| j I dH }|| jr?|d}| j}| jd }||ks2||kr=d| _ | j| dS |S | j I dH }|| jrS|dd }| j| |S )z Reads body part by line by line.r   Nr      --T)	r   r   popleftr   r   rw   r   rstripr~   )r   linesliner   Zlast_boundary	next_liner:   r:   r;   r   p  s(   

zBodyPartReader.readlinec                    s2   | j rdS | j s| | jI dH  | j r	dS dS )z0Like read(), but reads all the data to the void.N)r   r   r   r   r:   r:   r;   r     s   zBodyPartReader.release)rq   rq   c                   s.   | j ddI dH }|p| jdd}||S )z;Like read(), but assumes that body part contains text data.Tr   Nr^   default)r   get_charsetr   r   rq   r   r:   r:   r;   rX     s   
zBodyPartReader.textc                   sJ   | j ddI dH }|sdS |p| jdd}ttttf t||S )z<Like read(), but assumes that body parts contains JSON data.Tr   Nr^   r   )	r   r   r   r   r`   r   jsonloadsr   r   r:   r:   r;   r     s   zBodyPartReader.jsonc                   sr   | j ddI dH }|sg S |dur|}n| jdd}z	| |}W n ty1   td| w t|d|dS )zFLike read(), but assumes that body parts contain form urlencoded data.Tr   Nr^   r   z'data cannot be decoded with %s encoding)keep_blank_valuesrq   )r   r   r   r   rk   
ValueErrorr   )r   rq   r   Zreal_encodingZdecoded_datar:   r:   r;   form  s"   zBodyPartReader.formc                 C      | j S )z<Returns True if the boundary was reached or False otherwise.r   r   r:   r:   r;   r        zBodyPartReader.at_eofr   c                 C   s,   t | jv r
| |}t| jv r| |S |S )zDecodes data.

        Decoding is done according the specified Content-Encoding
        or Content-Transfer-Encoding headers value.
        )r   r   _decode_content_transferr   _decode_content)r   r   r:   r:   r;   r     s
   



zBodyPartReader.decodec                 C   sF   | j td }|dkr|S |dv rt|dd|S td| )NrV   identity>   gzipdeflateT)rq   suppress_deflate_headerunknown content encoding: )r   r   r   rh   r   Zdecompress_syncRuntimeErrorr   r   rq   r:   r:   r;   r     s   zBodyPartReader._decode_contentc                 C   sP   | j td }|dkrt|S |dkrt|S |dv r!|S td	|)NrV   base64quoted-printable)binary8bit7bit%unknown content transfer encoding: {})
r   r   r   rh   r   	b64decodebinasciia2b_qpr   formatr   r:   r:   r;   r     s   

z'BodyPartReader._decode_content_transferr   c                 C   s$   | j td}t|}|jd|S )z>Returns charset parameter from Content-Type header or default.rV   charset)r   r   r   r"   
parameters)r   r   ctypemimetyper:   r:   r;   r     s   zBodyPartReader.get_charsetc                 C      t | jt\}}t|dS )z|Returns name specified in Content-Disposition header.

        If the header is missing or malformed, returns None.
        rv   r2   r   r   r   r3   r   rr   rm   r:   r:   r;   rv        
zBodyPartReader.namec                 C   r   )zReturns filename specified in Content-Disposition header.

        Returns None if the header is missing or malformed.
        ru   r   r   r:   r:   r;   ru     r   zBodyPartReader.filenamer   )%r7   r8   r9   r   r   bytesr,   r   r   r   r   r   r   rA   r   r   r   r   r   r   r   r`   rX   r   r   r   r
   r   r   r   r   r   r   r   r#   rv   ru   r:   r:   r:   r;   r/      sB    
"
((r/   )orderc                       s@   e Zd Zdedededdf fddZdeddfd	d
Z  ZS )BodyPartReaderPayloadrp   argskwargsr>   Nc                    sb   t  j|g|R i | i }|jd ur|j|d< |jd ur#|j|d< |r/| jdi | d S d S )Nrv   ru   
attachmentT)r   T)superr   rv   ru   Zset_content_disposition)r   rp   r   r   rm   	__class__r:   r;   r     s   



zBodyPartReaderPayload.__init__writerc                    sR   | j }|jddI d H }|r'|||I d H  |jddI d H }|sd S d S )Ni   )r   )rt   r   writer   )r   r   fieldr   r:   r:   r;   r   	  s   zBodyPartReaderPayload.write)r7   r8   r9   r/   r   r   r   __classcell__r:   r:   r   r;   r     s    r   c                   @   s"  e Zd ZdZeZdZeZde	e
e
f deddfddZded fd	d
Zdeed ef  fddZedddefddZdefddZdeed ef  fddZd(ddZded ef fddZddded ef fddZde
fddZdefddZd(d d!Zd(d"d#Zd)d$d%Zd(d&d'Z dS )*r-   zMultipart body reader.Nr   r   r>   c                 C   s:   || _ d|    | _|| _d | _d| _d| _g | _d S )Nz--FT)	r   _get_boundaryencoder   r   
_last_partr   _at_bofr   )r   r   r   r:   r:   r;   r     s   
zMultipartReader.__init__r/   c                 C   r   r@   r:   r   r:   r:   r;   r   %  s   zMultipartReader.__aiter__c                    r   r@   r   r   r:   r:   r;   r   *  r   zMultipartReader.__anext__responser4   c                 C   s   |  || |j|j}|S )zConstructs reader instance from HTTP response.

        :param response: :class:`~aiohttp.client.ClientResponse` instance
        )response_wrapper_clsr   r   )clsr  objr:   r:   r;   from_response2  s   	zMultipartReader.from_responsec                 C   r   )z@Returns True if the final boundary was reached, false otherwise.r   r   r:   r:   r;   r   @  r   zMultipartReader.at_eofc                    sd   | j rdS |  I dH  | jr|  I dH  d| _n|  I dH  | j r'dS |  I dH | _| jS )z#Emits the next multipart body part.NF)r   _maybe_release_last_partr   _read_until_first_boundary_read_boundaryfetch_next_partr   r   r:   r:   r;   r   D  s   zMultipartReader.nextc                    s>   | j s|  I dH }|du rdS | I dH  | j rdS dS )z=Reads all the body parts to the void till the final boundary.N)r   r   r   r   r:   r:   r;   r   V  s   zMultipartReader.releasec                    s   |   I dH }| |S )z"Returns the next body part reader.N)_read_headers_get_part_reader)r   r   r:   r:   r;   r	  ^  s   
zMultipartReader.fetch_next_partr   c                 C   sX   | td}t|}|jdkr#| jdu rt| || jS | || jS | | j|| jS )zDispatches the response by the `Content-Type` header.

        Returns a suitable reader instance.

        :param dict headers: Response headers
        rV   	multipartN)r   r   r"   typemultipart_reader_clsr   part_reader_clsr   )r   r   r   r   r:   r:   r;   r  e  s   


z MultipartReader._get_part_readerc                 C   sb   t | jt }|jdksJ dd|jvrtd| jt  |jd }t|dkr/td| |S )Nr  z!multipart/* content type expectedr   z$boundary missed for Content-Type: %sF   z&boundary %r is too long (70 chars max))r"   r   r   r  r   r   r   )r   r   r   r:   r:   r;   r   y  s   

zMultipartReader._get_boundaryc                    s"   | j r	| j  S | j I d H S r@   )r   rg   r   r   r   r:   r:   r;   	_readline  s   
zMultipartReader._readlinec                    sX   	 |   I d H }|dkrtd| j | }|| jkrd S || jd kr+d| _d S q)NTr   z#Could not find starting boundary %rr   )r  r   r   r   r   r   r   r:   r:   r;   r    s   
z*MultipartReader._read_until_first_boundaryc                    s   |   I d H  }|| jkrd S || jd krCd| _|   I d H }|   I d H }|d d dkr9| j| d S | j||g d S td|d| j)Nr   TrI   zInvalid boundary z, expected )r  r   r   r   r   r~   r   r   )r   r   epiloguer   r:   r:   r;   r    s   
zMultipartReader._read_boundaryc                    sL   dg}	 | j  I d H }| }|| |snqt }||\}}|S )Nr   )r   r   ri   r~   r$   parse_headers)r   linesr   parserr   Zraw_headersr:   r:   r;   r
    s   
zMultipartReader._read_headersc                    sD   | j dur | j  s| j  I dH  | j| j j d| _ dS dS )z8Ensures that the last read body part is read completely.N)r   r   r   r   r   r   r:   r:   r;   r    s   


z(MultipartReader._maybe_release_last_partr   )r>   r   )!r7   r8   r9   r   r   r  r  r/   r  r   r`   r,   r   r   r   r   r   r   classmethodr  rA   r   r   r   r	  r  r   r   r  r  r  r
  r  r:   r:   r:   r;   r-     sJ    	










r-   c                       s  e Zd ZdZd.dedee ddf fddZd/d	d
Zdeee	  dee	 dee
 ddfddZdee fddZdefddZdefddZedZedZedefddZedefddZd0dedeee  defddZd edefd!d"Z	d0dedeee  defd#d$Z	d0de e!e"eef  e#eef f deee  defd%d&Z$edee fd'd(Z%d1d*ed+eddfd,d-Z&  Z'S )2r.   zMultipart body writer.mixedNsubtyper   r>   c                    sl   |d ur|nt  j}z|d| _W n ty   tdd w d| d| j }t j	d |d g | _
d S )Nasciiz(boundary should contain ASCII only charsz
multipart/z; boundary=)content_type)uuiduuid4hexr   r   UnicodeEncodeErrorr   _boundary_valuer   r   _parts)r   r  r   r   r   r:   r;   r     s   

zMultipartWriter.__init__c                 C   r   r@   r:   r   r:   r:   r;   	__enter__  r   zMultipartWriter.__enter__exc_typeexc_valexc_tbc                 C   s   d S r@   r:   )r   r#  r$  r%  r:   r:   r;   __exit__  s   zMultipartWriter.__exit__c                 C   
   t | jS r@   )iterr!  r   r:   r:   r;   __iter__  rQ   zMultipartWriter.__iter__c                 C   r'  r@   )r   r!  r   r:   r:   r;   __len__  rQ   zMultipartWriter.__len__c                 C   s   dS )NTr:   r   r:   r:   r;   __bool__  r   zMultipartWriter.__bool__s   \A[!#$%&'*+\-.^_`|~\w]+\Zs   [\x00-\x08\x0A-\x1F\x7F]c                 C   s^   | j }t| j|r|dS t| j|rtd|dd}|dd}d|d d S )zzWrap boundary parameter value in quotes, if necessary.

        Reads self.boundary and returns a unicode string.
        r  z*boundary value contains invalid characters   \s   \\   "s   \"rF   )	r   rY   match_valid_tchar_regexr   search_invalid_qdtext_char_regexr   replace)r   rp   Zquoted_value_contentr:   r:   r;   r     s   
zMultipartWriter._boundary_valuec                 C   s   | j dS )Nr  )r   r   r   r:   r:   r;   r     r   zMultipartWriter.boundaryr  r   c                 C   sd   |d u rt  }t|tr|j| | |S zt||d}W n ty,   td| w | |S )Nr   zCannot create payload from %r)	r   
isinstancer(   r   updateappend_payloadr*   r&   	TypeError)r   r  r   payloadr:   r:   r;   r~     s   


zMultipartWriter.appendr8  c                 C   s   |j td }|r|dvrtd| |dkrd}|j td }|dvr0td||dkr6d}|j}|durH|sH|sHt||j t	< | j
|||f |S )	z)Adds a new body part to multipart writer.rV   )r   r   r   r   r   N)rV   r   r   r   r   r   )r   r   r   rh   r   r   r   r   r`   r   r!  r~   )r   r8  rq   te_encodingr   r:   r:   r;   r6  )  s6   zMultipartWriter.append_payloadc                 C   s    |du rt  }| t||dS )zHelper to append JSON part.Nr3  )r   r6  r%   )r   r  r   r:   r:   r;   append_jsonI  s   zMultipartWriter.append_jsonc                 C   sV   t |ttfs	J |du rt }t |trt| }t|dd}| t||ddS )z&Helper to append form urlencoded part.NT)doseqz!application/x-www-form-urlencoded)r   r  )	r4  r   r   r   listr|   r   r6  r)   )r   r  r   r   r:   r:   r;   append_formR  s   
zMultipartWriter.append_formc                 C   sv   d}| j D ](\}}}|s|s|jdu r dS |tdt| j d |j t|j d 7 }q|dt| j d 7 }|S )zSize of the payload.r   NrI      )r!  r   r   r   r   _binary_headers)r   totalr   rq   r9  r:   r:   r;   r   g  s&   	zMultipartWriter.sizeTr   close_boundaryc                    s   | j D ]Q\}}}|d| j d I dH  ||jI dH  |s#|rEt|}|r.|| |r5|| ||I dH  | I dH  n||I dH  |dI dH  q|rg|d| j d I dH  dS dS )zWrite body.r   r   Ns   --
)r!  r   r   r?  MultipartPayloadWriterenable_compressionenable_encoding	write_eof)r   r   rA  r   rq   r9  wr:   r:   r;   r   {  s"   

zMultipartWriter.write)r  N)r>   r.   r@   )T)(r7   r8   r9   r   r`   r   r   r"  r   BaseExceptionr   r&  r	   _Partr)  r   r*  rA   r+  rY   compiler/  r1  propertyr   r   r   r   r(   r~   r6  r:  r   r   r   r   r=  r   r   r   r:   r:   r   r;   r.     sV     




 !



 r.   c                   @   sj   e Zd ZdeddfddZdeddfddZd	ejfded
e	ddfddZ
dddZdeddfddZdS )rB  r   r>   Nc                 C   s   || _ d | _d | _d | _d S r@   )_writer	_encoding	_compress_encoding_buffer)r   r   r:   r:   r;   r     s   
zMultipartPayloadWriter.__init__rq   c                 C   s0   |dkr|| _ t | _d S |dkrd| _ d S d S )Nr   r   )rL  r   rN  )r   rq   r:   r:   r;   rD    s   
z&MultipartPayloadWriter.enable_encodingr   strategyc                 C   s   t |d|d| _d S )NT)rq   r   rO  )r   rM  )r   rq   rO  r:   r:   r;   rC    s
   z)MultipartPayloadWriter.enable_compressionc                    sf   | j d ur| j  }|rd | _ | |I d H  | jdkr/| jr1| jt| jI d H  d S d S d S )Nr   )rM  flushr   rL  rN  rK  r   	b64encoder  r:   r:   r;   rE    s   


z MultipartPayloadWriter.write_eofr   c                    s   | j d ur|r| j |I d H }|sd S | jdkr[| j}|d us#J || |rWtt|d\}}|d |d  ||d d  }| _|rYt|}| j	
|I d H  d S d S d S | jdkrn| j	
t|I d H  d S | j	
|I d H  d S )Nr   r   r   )rM  compressrL  rN  r   divmodr   r   rQ  rK  r   r   b2a_qp)r   r   bufdivmodZ	enc_chunkZb64chunkr:   r:   r;   r     s*   


$

zMultipartPayloadWriter.writer   )r7   r8   r9   r   r   r`   rD  zlibZ_DEFAULT_STRATEGYr   rC  rE  r   r   r:   r:   r:   r;   rB    s    

	rB  )ru   )Mr   r   r   rY   r  re   rX  collectionsr   typesr   typingr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   urllib.parser   r   r   Z	multidictr   r   r   Zcompression_utilsr   r   hdrsr   r   r   r   r   helpersr    r!   r"   r#   httpr$   r8  r%   r&   r'   r(   r)   r*   r+   streamsr,   __all__Zclient_reqrepr4   RuntimeWarningr0   r1   r`   r2   r3   r   r/   Z	try_firstr   r-   rH  r.   rB  r:   r:   r:   r;   <module>   s^    @$	
d

!/  8 H